PYTHON SQLITE3插入:如果存在,则进行加法

2024-05-13 01:44:10 发布

您现在位置:Python中文网/ 问答频道 /正文

预照明:

我在sqlite3db中有一个表“baseline”。 表“基线”有以下列:

  1. 文字
  2. 计数器

问题: 如何让sqlite3引擎(如果效率更高)为我执行以下操作

  • 如果表“baseline”已经有一个主键为“word”的元素,则插入时不替换此行,而是在旧计数器和新计数器之间进行加法。你知道吗

示例

执行以下插入命令后:

"INSERT INTO  baseline(word, counter) VALUES 'bla', 1; "
"INSERT INTO  baseline(word, counter) VALUES 'bla', 1; "

我想从数据库中获取以下数据:

>>> "SELECT * FROM baseline;" 
'("bla", 2)'

Thx提前=)


Tags: 引擎counter计数器sqlite3word效率insertvalues
2条回答

如果word是主键,即:

CREATE TABLE baseline (word TEXT PRIMARY KEY, counter INTEGER);

那么下面的方法就行了:

INSERT OR REPLACE INTO baseline VALUES (
    'foo',
    COALESCE((SELECT counter FROM baseline WHERE word='foo'), 0) + 1
);

COALESCE()函数如果表中有单词,则返回count;如果表中没有单词,则返回0。你知道吗

如果在word列上有一个唯一的约束,那么可以用两个语句轻松地完成这一点。你知道吗

INSERT OR IGNORE INTO baseline
(word, counter)
VALUES
('bla', 0);

在这里,我们要么插入一个计数器为0的新词,要么如果它已经存在,那么什么也不会发生。你知道吗

UPDATE baseline
SET counter = counter+1
WHERE word = 'bla';

无论word键是否已存在,都运行此update语句。这就是为什么我们将counter设置为0,而不是1。这样我们就不需要在代码中使用任何外部逻辑。你知道吗

相关问题 更多 >