使用 SQLite 参数替换值以及 NULL

Using SQLite parameter substitution for values as well as NULL

我想找到其值满足特定条件的行。这些值以及用于过滤的参数可以是实数或 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,)]

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

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