在sqlite3中根据列更新或替换

3 投票
2 回答
2511 浏览
提问于 2025-04-18 00:47

我正在用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

只有当插入的数据会导致违反这些限制条件时,系统才会先删除冲突的那一行,然后再插入新的数据。如果没有这些限制条件,就没有需要被替换的行。

撰写回答