Sqlite3 INSERT语句中的Python变量替换

时间:2013-05-01 16:18:38

标签: python python-3.x sqlite

在更新针对已知rowid的Sqlite数据时,有没有办法使用Python的变量替换?我想说的是:

cursor.execute('INSERT INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3])

问题是这失败并出现错误:

sqlite3.IntegrityError: PRIMARY KEY must be unique

我想在不更改rowid编号的情况下将值列表写入表的现有记录中。从值列表中更新所有字段的可接受方法是什么?

1 个答案:

答案 0 :(得分:3)

您使用UPDATE代替INSERT

cursor.execute('UPDATE Words SET f1=?, f2=? WHERE rowid=?', [2, 3, rowid])

这告诉数据库为f1与指定值匹配的所有行更新f2rowid列的新值。

或者,使用INSERT OR REPLACE syntax;如果违反了唯一性约束(例如主键不唯一),则会发出UPDATE,但如果rowid尚未出现,则会插入新行:

cursor.execute('INSERT OR REPLACE INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3])