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

时间:2018-08-27 16:18:03

标签: python sqlite

排字法:

我在Sqlite3-DB中具有表“基准”。 表“基准”具有以下列:

  1. 单词
  2. 柜台

问题: 任何想法都可以通过以下操作让sqlite3引擎(如果更高效)为我做:

  • 如果表“基线”已经具有带有主键“ word”的元素,则在插入时不要替换该行,而要在旧计数器和新计数器之间进行加法。

示例

在执行插入命令之后:

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

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

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

提前感谢=)

2 个答案:

答案 0 :(得分:3)

如果您对word列具有唯一约束,则可以使用两个语句轻松地做到这一点。

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

在这里,我们插入一个计数器为0的新单词,或者如果它已经存在,则什么也没有发生。

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

运行此更新语句,无论是否已经存在word密钥。这就是为什么我们将counter设置为0而不是1的原因。这样,我们在代码中不需要任何外部逻辑。

答案 1 :(得分:3)

如果单词是主键,即:

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()函数返回表中是否存在单词的计数,否则返回0。