3
我正在使用psycopg2
通过Python 3访问PostgreSQL数据库,并且我正在尝试查询我想要选择名称在列表中的所有用户的查询,如果列表不为空。如果提供的列表为空,我想忽略该条件,即选择所有用户,而不管他们的名字。如何检查值是否在列表中或列表是否为空?
我已经尝试了以下三个调用:
# Using list
cursor.execute(
"SELECT age FROM user WHERE %(names) = '{}' OR user.name IN %(names)s",
{'names': []},
)
# Using tuple
cursor.execute(
"SELECT age FROM user WHERE %(names) =() OR user.name IN %(names)s",
{'names':()},
)
# Using both list and tuple
cursor.execute(
"SELECT age FROM user WHERE %(names_l) = '{}' OR user.name IN %(names_t)s",
{'names_l': [], 'names_t':()},
)
但他们都抛出一个无效的语法错误,从一个点或另一个:
# Using list
psycopg2.ProgrammingError: syntax error at or near "'{}'"
LINE 17: user.name IN '{}'
# Using tuple
psycopg2.ProgrammingError: syntax error at or near ")"
LINE 16: () ==()
# Using both list and tuple
psycopg2.ProgrammingError: syntax error at or near ")"
LINE 17: user.name IN()
我觉得真的很傻,现在,没有意识到我可以使用SQL的'NULL'尽管我也知道它的存在和所有......但是,这工作得很好,谢谢你的帮助! :) –