Tel*_*lur 5 python null psycopg2
我在 python 中使用 psycopg2 库,INSERT当我用 None 插入空值时,查询效果很好,但是当我想要SELECT做空值时,用 None 不返回任何值。
cur.execute("SELECT id FROM registro WHERE id_movil = (%s);", (None,))
Run Code Online (Sandbox Code Playgroud)
此查询不返回任何行,我不知道错误在哪里。
任何人都知道如何进行SELECT查询以在数据库中查找空值?
首先要做的是找出它将您的命令转换为什么查询:
print(cur.mogrify("SELECT id FROM registro WHERE id_movil = (%s);", (None,)))
Run Code Online (Sandbox Code Playgroud)
如果这给您提供了除代码IS NULL检查之外的任何内容,则它不会从表中获得 NULL。
具体来说,如果您看到短语= 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,))
Run Code Online (Sandbox Code Playgroud)
或者,如果您知道自己一直在寻找NULL值(正如您对常量的使用None似乎表明的那样),只需使用:
cur.execute("SELECT id FROM registro WHERE id_movil IS NULL;")
Run Code Online (Sandbox Code Playgroud)
(1)当参数是 时,很有可能只有%s被 a 替换,而且返回并更改为(或变为)还不够聪明。NULLNone=IS<>IS NOT
这将解释为什么这样做:
cur.execute("INSERT into mytbl value (%s);", (None,))
Run Code Online (Sandbox Code Playgroud)
(因为替代只有在%s给你想要的命令),但与任何= NULL预期不会采取行动,除非你已经被它足够的时间烧毁知道会发生什么事情:-)。