在更新针对已知rowid的Sqlite数据时,有没有办法使用Python的变量替换?我想说的是:
cursor.execute('INSERT INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3])
问题是这失败并出现错误:
sqlite3.IntegrityError: PRIMARY KEY must be unique
我想在不更改rowid编号的情况下将值列表写入表的现有记录中。从值列表中更新所有字段的可接受方法是什么?
答案 0 :(得分:3)
您使用UPDATE
代替INSERT
:
cursor.execute('UPDATE Words SET f1=?, f2=? WHERE rowid=?', [2, 3, rowid])
这告诉数据库为f1
与指定值匹配的所有行更新f2
和rowid
列的新值。
或者,使用INSERT OR REPLACE
syntax;如果违反了唯一性约束(例如主键不唯一),则会发出UPDATE
,但如果rowid
尚未出现,则会插入新行:
cursor.execute('INSERT OR REPLACE INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3])