6

Gang,我开始玩 pySQLite,我试图找到一个示例来说明如何在插入新记录之前查询数据库中的现有记录(如果数据库中尚不存在)。我觉得我忽略了一个非常基本的功能。

谢谢!

4

1 回答 1

11

UNIQUE创建表时使用关键字,INSERT OR INGORE仅当记录为“新”(唯一)时才使用插入:

connection=sqlite3.connect(':memory:')
cursor=connection.cursor()
cursor.execute('CREATE TABLE foo (bar INTEGER UNIQUE, baz INTEGER)')

这里我们插入行一次:

cursor.execute('INSERT INTO foo (bar,baz) VALUES (?, ?)',(1,2))

尝试再次插入行失败:

try:
    cursor.execute('INSERT INTO foo (bar,baz) VALUES (?, ?)',(1,2))
except sqlite3.IntegrityError as err:
    print(err)
    # sqlite3.IntegrityError: column bar is not unique

INSERT OR IGNOREUNIQUE仅在通过了约束时才插入记录:

cursor.execute('INSERT OR IGNORE INTO foo (bar,baz) VALUES (?, ?)',(1,3))

cursor.execute('SELECT * from foo')
data=cursor.fetchall()
print(data)
# [(1, 2)]    

要在多个字段上创建UNIQUE索引,请使用类似

cursor.execute('''
    CREATE TABLE foo (bar INTEGER, baz INTEGER, bing INTEGER, UNIQUE (bar, baz))''')

以下是有关信息的链接

  1. 插入或忽略
  2. 唯一约束
于 2011-04-10T15:33:04.123 回答