在sqlite3中根据列更新或替换
我正在用Python和sqlite3。我的表里存储了日期时间和温度。
我想在有新数据进来的时候更新已有的行,如果有相同的日期时间,就更新那一行;如果没有相同的日期时间,就插入一行新的数据。
举个例子,如果有一行的日期时间是'2014年3月12日',我的代码应该更新这行数据,或者创建一条新的记录。但是,下面的代码不幸的是总是创建一条新的记录,不管怎样:
c.execute("INSERT or REPLACE INTO weather (datetime, temp) VALUES ('12 Mar 2014', 20)")
如果有任何建议,我都非常感激!
附言:我知道之前有人问过类似的问题,但我担心我无法理解那些答案怎么应用到我自己的问题上(作为新手,这确实让我很困扰!)
2 个回答
1
替换语句只能在主键或唯一约束上使用,你可以在这里查看相关信息。
所以,建议把日期时间设置为唯一或主键(设置为唯一更好),这样你的替换语句才能正常工作。
3
要让 INSERT OR REPLACE
这个命令正常工作,你需要在表中设置一些限制条件,比如说:
datetime TEXT UNIQUE
只有当插入的数据会导致违反这些限制条件时,系统才会先删除冲突的那一行,然后再插入新的数据。如果没有这些限制条件,就没有需要被替换的行。