您好我是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并且创建表应该在第一次删除之后删除,每次只能创建1条记录。
答案 0 :(得分:3)
如果您想要code
的真正随机值,我会使用uuid
模块。 import uuid; print 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
。
答案 1 :(得分:2)
您可以使用EXISTS语句检查随机值是否存在。您也可以将init与插入操作分开。以下代码是一个演示,可以实现在db中插入n个非重复值。
import random
import sqlite3
def init():
db = sqlite3.connect('Filmdatabase.db')
db.execute('DROP TABLE IF EXISTS randomcode')
db.execute('CREATE TABLE randomcode(code INT, name TEXT)')
def insert_random():
db = sqlite3.connect('Filmdatabase.db')
while True:
randomcode = random.randint(100000, 999999)
###Attention the EXISTS statement
cursor = db.execute('SELECT EXISTS(SELECT * FROM randomcode where code=?)', (randomcode,))
if cursor.fetchone()[0] == 0:
break
db.execute('INSERT INTO randomcode (code, name) VALUES (?, ?)', (randomcode, 'Jay'))
db.commit()
def check():
db = sqlite3.connect('Filmdatabase.db')
cursor = db.execute('SELECT * FROM randomcode')
for i in cursor:
print(i)
init()
for i in range(0, 10): #insert as many as you want.
insert_random()
check()