Ich verwende psycopg2
Python eine PostgreSQL-Datenbank über 3 zugreifen zu können, und ich bin versucht, eine Abfrage zu machen, wo ich alle Benutzer Namen in einer Liste enthalten sind, deren auswählen möchten, wenn die Liste nicht leer ist. Wenn die bereitgestellte Liste leer ist, möchte ich die Bedingung ignorieren, d.h. alle Benutzer unabhängig von ihrem Namen auswählen.Wie überprüft man, ob der Wert in einer Liste ist oder ob die Liste leer ist?
Ich habe bereits versucht, die folgenden drei Aufrufe:
# 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':()},
)
Aber sie alle heben einen ungültigen Syntaxfehler von einem Punkt oder einen anderen:
# 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()
ich jetzt wirklich dumm fühlen, wusste nicht, ich SQLs verwenden könnte 'NULL' obwohl ich wusste, es existiert und alles ... Aber das hat super funktioniert, danke für die Hilfe! :) –