1

我正在尝试INSERT or REPLACE INTO t1是否name已经存在。我知道如果设置了 id 则替换将起作用,但我需要它对名称做出反应。

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列,因为 sqlite3ROWID在每个表上都有。

于 2013-01-05T01:48:21.240 回答