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