Skip to main content
 首页 » 编程设计

python之sqlite python 如果已经存在

2025年05月04日33over140

你好,我是 python 和 sql 的新手,我有一个问题,如何检查记录是否已经存在?

import random 
import sqlite3 
 
randomcode = random.randint(100000, 999999) 
 
def datebase(): 
    db = sqlite3.connect('Filmdatabase.db') 
    db.execute('DROP TABLE IF EXISTS randomcode') 
    db.execute('CREATE TABLE randomcode(code INT, name TEXT)') 
    db.execute('INSERT INTO randomcode (code, name) VALUES (?, ?)', (randomcode, 'Jay')) 
    db.commit() 
    cursor = db.execute('SELECT * FROM randomcode ') 
    for row in cursor: 
        print(row) 
datebase() 

他创建了一个随机值,但如果随机值已经存在,他需要再次运行它。怎么办?

我知道应该在第一次之后删除 drop if exist 和 create table 否则你每次只会创建 1 条记录。

请您参考如下方法:

如果你想要一个真正随机的code值,我会使用uuid模块。 导入uuid;打印 uuid.uuid5(uuid.NAMESPACE_DNS, 'random.org').get_hex()。这个数字是如此之大,以至于截至 2015 年 10 月还没有已知的碰撞 (https://en.wikipedia.org/wiki/SHA-1)。

但是假设您仍然想毫无疑问地知道。

import random 
import sqlite3 
 
def randomcode(): 
    return random.randint(1,3) 
 
def datebase(): 
    db = sqlite3.connect('Filmdatabase.db') 
    db.execute('DROP TABLE IF EXISTS randomcode') 
    db.execute('CREATE TABLE randomcode(code INT, name TEXT)') 
 
    create_user(db, 'Jay') 
    create_user(db, 'Joe') 
    create_user(db, 'Bob') 
 
    cursor = db.execute('SELECT * FROM randomcode ') 
    for row in cursor: 
        print(row) 
 
def create_user(db, user): 
    while True: 
        code = randomcode() 
        if db.execute('SELECT count(code) FROM randomcode where code = ?', (code,)).fetchone()[0] ==  0: 
            break 
 
    db.execute('INSERT INTO randomcode (code, name) VALUES (?, ?)', (code, user)) 
    db.commit() 
datebase() 

我强烈建议您不要使用 randint() 并使用 uuid。