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'儘管我也知道它的存在和所有......但是,這工作得很好,謝謝你的幫助! :) –