Я использую psycopg2
для доступа к базе данных PostgreSQL через Python 3, и я пытаюсь сделать запрос, в котором я хочу выбрать всех пользователей, чье имя находится в списке, , если список не пуст. Если предоставленный список пуст, я хочу проигнорировать условие, то есть выбрать всех пользователей независимо от их имени.Как проверить, включено ли значение в списке или пуст ли список?
Я уже пробовал следующие три вызова:
# 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()
Я чувствую себя очень глупо сейчас, не понимаю, что я мог бы использовать 'NULL' SQL, даже если бы я знал, он существует и все ... Но это отлично поработало, спасибо за помощь! :) –