仅插入或替换特定值?

INSERT OR REPLACE only specific values?

我有一个 table:

    DATE        WEATHERSTATION    TEMPERATURE        RAINFALL
1975-01-10           B81A             25                0
1975-01-11           K174             33                16
1975-01-12           ZG4N             18                3

我通过首先处理包含日期和温度的输入,然后处理包含日期和降雨量的输入来构建此 table。有时,降雨数据中的某些日期在温度数据中不存在(例如,如果气象站开始记录 1950 年的降雨量但 1970 年的温度 - 它发生了)。

我想说的是:

  1. 如果这个日期已经有一行,更新值X(可以是温度或降雨量,具体取决于程序);
  2. 如果没有包含此日期的行,请创建它。

显然,我可以在程序本身中执行此操作,但我认为在 SQL 中执行此操作会更有效、更明智。

如果我使用 INSERT OR REPLACE INTO weatherdata (date, weatherstation, temperature),因为那样会删除降雨量值。我想要的是 INSERT OR UPDATE INTO WEATHERDATA,但似乎不存在;我用 Google 搜索过它,并阅读了有关它的 Whosebug 帖子,但没有任何帮助。

在这种情况下,正确的做法是什么?

(数据库系统是 SQLite,如果重要的话。)

只有在您拥有 client/server 数据库并希望将网络开销降至最低的情况下,在 SQL 中执行此操作才会更有效率。 但是 SQLite 是一个嵌入式数据库,它是一个链接到您的程序中的库;将 SQL 与您的程序逻辑混合不会丢失任何内容。

在 SQL 中这样做是不明智的(它是 possible,但读取和删除旧行然后插入新行的效率较低)。

只需执行您程序中的逻辑即可:

db.execute("UPDATE ...")
if db.affected_rows == 0:
    db.execute("INSERT ...")