使用SQLite参数替换值以及NULL

时间:2018-06-26 14:42:22

标签: python sqlite null isnull

我想找到满足某些条件的行及其值。值以及用于过滤的参数可以是实数或NULL

作为示例,请考虑以下数据库:

import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.executescript("CREATE TABLE tab (value INTEGER); INSERT INTO tab VALUES (NULL), (42);")

现在,我正在寻找一个参数替换变量,该变量能够处理NULL和非NULL值。

print(c.execute("SELECT * FROM tab WHERE value=?", (42,)).fetchall())
--> [(42,)]
print(c.execute("SELECT * FROM tab WHERE value=?", (None,)).fetchall())
--> []

可以看出,后一种无效。为了使用None语法,是否需要检查所有用于过滤的参数的IS NULL的值?

print(c.execute("SELECT * FROM tab WHERE value IS NULL").fetchall())
--> [(None,)]

1 个答案:

答案 0 :(得分:1)

在SQLite中,IS运算符还处理非NULL值:

c.execute("SELECT * FROM tab WHERE value IS ?", (anything,))