我有一张桌子:
DATE WEATHERSTATION TEMPERATURE RAINFALL
1975-01-10 B81A 25 0
1975-01-11 K174 33 16
1975-01-12 ZG4N 18 3
我通过首先处理包含日期和温度的输入,然后是包含日期和降雨量的输入来构建此表。有时,降雨数据中的日期不会存在于温度数据中(例如,如果气象站开始记录1950年的降雨量,但是1970年的温度会发生 - 它会发生)。
我想做的是说:
显然,我可以在程序本身内执行此操作,但我认为在SQL中执行此操作会更有效和合理。
如果我使用INSERT OR REPLACE INTO weatherdata (date, weatherstation, temperature)
,因为这会删除降雨量值。我喜欢的是INSERT OR UPDATE INTO WEATHERDATA
,但这似乎并不存在;我用谷歌搜索了它,并阅读了关于它的StackOverflow帖子,但没有任何东西对我有帮助。
在这种情况下做什么是正确的?
(数据库系统是SQLite,如果重要的话。)
答案 0 :(得分:1)
只有拥有客户端/服务器数据库且希望最大限度地减少网络开销时,在SQL中执行此操作才会更有效。 但SQLite是一个嵌入式数据库,它是一个链接到你的程序的库;将SQL与程序的逻辑混合不会丢失任何东西。
在SQL中执行它是不明智的(它是possible,但是读取和删除旧行然后插入新行的效率会低一些。)
只需在程序中执行逻辑:
db.execute("UPDATE ...")
if db.affected_rows == 0:
db.execute("INSERT ...")