Первое, что нужно сделать, это выяснить, какие запросы он превращая вашу команду в:
print(cur.mogrify("SELECT id FROM registro WHERE id_movil = (%s);", (None,)))
Если что дает ничего, кроме IS NULL
проверки codition, он не будет получать NULLs из таблицы.
В частности, если вы видите фразу = NULL
, вы будете знать, что это не переводится правильно (1), и вы должны сделать что-то вроде:
if var is None:
cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;")
else:
cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (var,))
Или, если вы знаете, «повторно всегда ищет NULL
значений (как ваше использование постоянного None
, кажется, указывает), просто используйте:
cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;")
(1) Вполне возможно, что только %s
заменяется NULL
, когда аргумент None
, и это не совсем достаточно умен, чтобы вернуться назад и изменить =
в IS
(или <>
в IS NOT
).
Это могло бы объяснить, почему это работает:
cur.execute("INSERT into mytbl value (%s);", (None,))
(потому что замена только%s
дает команду, которую вы хотите), но ничего с = NULL
не будет действовать, как и следовало ожидать, если вы не были сожжены им достаточно времени до знаю что ожидать :-).
Спасибо !!! Это работает! И если я хочу сделать двойное условие где?Например id_movil IS NULL и name = xxx? Например: –
@Telmo, предполагая, что 'xxx' не является None, вы можете использовать что-то вроде' cur.execute («SELECT id FROM registro WHERE id_movil IS NULL и name = (% s);», ('xxx',)) ' – paxdiablo
Спасибо большое @paxdiablo !! Оно работает! –