SQLite:INSERT或REPLACE w / null PRIMARY KEY

时间:2013-01-05 01:20:43

标签: python replace sqlite duplicates

如果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')]

1 个答案:

答案 0 :(得分:1)

只有在发生碰撞时,

INSERT or REPLACE ...才会替换。由于您的name列不可兼容,因此此事件无法发生(至少不在name上)。你需要使name可以碰撞:

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

另请注意,您不需要id列,因为sqlite3在每个表上都有ROWID

相关问题