/ / Korrigiere die Postgresql-Syntax:

Korrekte PostgreSQL-Syntax - Python, PostgreSQL

Ich bin ein Postgres-Neuling und habe einige ProblemeAbfragen eines Textfelds in Postgresql mit Python. Wie lautet die korrekte Syntax, um den Inhalt der Spalte "body" in der Tabelle "jivemessage" aus der Datenbank "postgres" zu durchsuchen?

try:
conn = psycopg2.connect("dbname="postgres" user="postgres" host="localhost"  password="<password>"")

except:
print "cannot connect"

i = "test"
cur = conn.cursor()

cur.execute("SELECT * from jivemessage WHERE body LIKE "%"+i+"%"")

Erhalten Sie weiterhin folgende Fehlermeldung:

ProgrammingError: column "%test%" does not exist

Danke für jede Hilfe.

Antworten:

2 für die Antwort № 1

Sie zitieren die Abfrage nicht richtig. Verwenden Sie hier keine String-Verkettung SQL-Parameter stattdessen:

cur.execute("SELECT * from jivemessage WHERE body LIKE %s", ("%{}%".format(i),))

Hier das %s Platzhalter signalisiert dem Datenbanktreiber, dass der erste Wert des zweiten Arguments bei der Abfrage dort abgelegt werden soll.

Dies überlässt die Interpolation dem Datenbanktreiber, sodass die Datenbank die Möglichkeit hat, die Abfrage zu optimieren Einmal, auch wenn Sie dieselbe Abfrage erneut verwenden würden.

Außerdem werden SQL-Injection-Angriffe besser verhindert als Sie selbst, und vor allem wird sichergestellt, dass die korrekten Zitierungsregeln eingehalten werden.