I am using psycopg2 library in python and the INSERT
query works good when I insert null Value with None, but when I want to do SELECT
null values, with None doesn't return any.
cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (None,))
This query doesnt return any rows, i dont know where is the error.
Anyone know how to make SELECT
query's to find null values in a DB?
First thing to do is find out what query it's turning your command into:
print(cur.mogrify("SELECT id FROM registro WHERE id_movil = (%s);", (None,)))
If that gives you anything other than an IS NULL
codition check, it won't get NULLs from the table.
Specifically, if you see the phrase = NULL
, you'll know it's not being translated correctly(1) and you'll have to do something like:
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,))
Or, if you know you're always looking for NULL
values (as your use of the constant None
seems to indicate), just use:
cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;")
(1) It's quite possible that only the %s
is replaced with a NULL
when the argument is None
, and it's not quite clever enough to go back and change =
into IS
(or <>
into IS NOT
).
This would explain why this works:
cur.execute("INSERT into mytbl value (%s);", (None,))
(because substitution of only the %s
gives the command you want), but anything with = NULL
will not act as expected, unless you've been burnt by it enough times to know what to expect :-).