Python SQLite返回不存在的行

时间:2016-08-15 11:39:05

标签: python sqlite

我有一个带ID /主题/定义列的数据库。当进行选择查询时,可能有数百个参数,我希望fetchall调用也返回任何不存在的行的主题,并带有默认文本(即“Not Found”)。

我意识到这可以在一个循环中完成,但是这会在每个周期查询数据库并且会有很大的性能损失。通过在单个select语句中通过“OR”连接的参数,搜索几乎是瞬时的。

有没有办法让SQLite中不存在的行的默认文本返回查询(主题)?

表结构(名为“词典”)

ID|Topic|Definition   
1|wd1|def1
2|wd3|def3

示例查询

SELECT Topic,Definition FROM dictionary WHERE Topic = "wd1" or Topic = "wd2" or topic = "wd3"'

期望的回归

[(wd1, def1), (wd2, "Not Found"), (wd3, def3)] 

1 个答案:

答案 0 :(得分:0)

要从查询中获取wd2之类的数据,这些数据必须首先出现在数据库中。 您可以将其放入临时表中,或使用common table expression

要包含没有匹配项的行,请使用outer join

WITH IDs(ID) AS ( VALUES ('wd1'), ('wd2'), ('wd3') )
SELECT Topic,
       IFNULL(Definition, 'Not Found') AS Definition
FROM IDs
LEFT JOIN dictionary USING (ID);