如果INSERT or REPLACE INTO t1
已经存在,我正在尝试name
。我知道如果设置了id,那么replace将起作用,但我需要它来响应名称。
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')]
答案 0 :(得分:1)
INSERT or REPLACE ...
才会替换。由于您的name
列不可兼容,因此此事件无法发生(至少不在name
上)。你需要使name
可以碰撞:
CREATE UNIQUE INDEX IF NOT EXISTS iname ON t1 (name)
另请注意,您不需要id
列,因为sqlite3在每个表上都有ROWID
。