排字法:
我在Sqlite3-DB中具有表“基准”。 表“基准”具有以下列:
问题: 任何想法都可以通过以下操作让sqlite3引擎(如果更高效)为我做:
示例
在执行插入命令之后:
"INSERT INTO baseline(word, counter) VALUES 'bla', 1; "
"INSERT INTO baseline(word, counter) VALUES 'bla', 1; "
我想从数据库中获取以下数据:
>>> "SELECT * FROM baseline;"
'("bla", 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。