Хорошо, после запуска REPL и немного поиграть с ним, все стало проще, чем я думал.Привязки Python sqlite превращают Python None
в SQL NULL
, а не в строку 'None'
, как это звучит, как в вашем вопросе.В SQL =
не соответствует NULL
значениям, но IS
будет.Итак ...
Учитывая таблицу foo
, которая выглядит следующим образом:
a | b
--------------
NULL | 1
Dog | 2
Выполнение:
c = conn.cursor()
c.execute('SELECT * FROM foo WHERE a IS ?', (None,))
print(c.fetchone())
вернет строку (NULL, 1)
и
c.execute('SELECT * FROM foo WHERE a IS ?', ('Dog',))
print(c.fetchone())
вернет строку ('Dog', 2)
.
Другими словами, используйте IS
, а не =
в своем запросе.