6

ギャング、私は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)')

ここで、行を1回挿入します。

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 に答える