在SQLite中,在一个语句中增加计数器或插入行

sqlite中,给出这个数据库模式
CREATE TABLE observations (
    src TEXT,dest TEXT,verb TEXT,occurrences INTEGER
);
CREATE UNIQUE INDEX observations_index
    ON observations (src,dest,verb);

每当一个新的观察元组(:src,:dest,:verb)进入时,我想为该元组的现有行增加“出现次数”列,如果没有,则添加一个新的行,如果出现次数= 1已经有一个具体伪码:

if (SELECT COUNT(*) FROM observations
        WHERE src == :src AND dest == :dest AND verb == :verb) == 1:
    UPDATE observations SET occurrences = occurrences + 1
        WHERE src == :src AND dest == :dest AND verb == :verb
else:
    INSERT INTO observations VALUES (:src,:dest,:verb,1)

我想知道是否可以在一个sqlite语句中执行此操作.这将简化应用程序逻辑(需要完全异步wrt数据库操作),并且还避免使用完全相同的键的双重索引查找. INSERT或REPLACE似乎不是我想要的,而且没有UPDATE或INSERT.

我从Igor Tandetnik得到了这个关于sqlite用户的答案:
INSERT OR REPLACE INTO observations
VALUES (:src,COALESCE(
    (SELECT occurrences FROM observations
       WHERE src=:src AND dest=:dest AND verb=:verb),0) + 1);

它略微但总是比dan04的方法更快.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能