Использование подстановки параметров SQLite для значений, а также NULL - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы найти строки, которые удовлетворяют определенным условиям со своими значениями. Значения и, следовательно, параметры для фильтрации могут быть действительными числами или 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 голосов
/ 26 июня 2018

В SQLite оператор IS также обрабатывает ненулевые значения:

c.execute("SELECT * FROM tab WHERE value IS ?", (anything,))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...