sqlite python如果已经存在?

时间:2015-10-15 12:09:36

标签: python sql

您好我是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条记录。

2 个答案:

答案 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()