1

がすでに存在するINSERT or REPLACE INTO t1かどうかを調べています。nameID が設定されている場合は置換が機能することを理解していますが、名前に反応する必要があります。

import sqlite3

def insert(name):
    cur.execute('INSERT OR REPLACE INTO t1(name) VALUES(?)', [name])    

def select():
    return cur.execute('SELECT * FROM t1').fetchall()


conn = sqlite3.connect('test')
cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS t1')
cur.execute('''CREATE TABLE IF NOT EXISTS t1(
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL
                )''') 


insert('jack')
insert('jack')
insert('jack')

print select()

出力

[(1, u'jack'), (2, u'jack'), (3, u'jack')]
4

1 に答える 1

2

INSERT or REPLACE ...衝突がある場合にのみ置き換えます。また、name列が衝突可能ではないため、このイベントは発生しません (少なくとも では発生しませんname)。衝突可能にする必要がありますname

CREATE UNIQUE INDEX IF NOT EXISTS iname ON t1 (name)

idまた、sqlite3 にはROWIDすべてのテーブルがあるため、列を持つ必要がないことに注意してください。

于 2013-01-05T01:48:21.240 に答える