2010-11-06 10 views
5

Ich habe den folgenden Code ein Insert in meine postgresql Datenbankpsycogp2 Python in postgresql Hilfe Einfügen

conn = psycopg2.connect("my connection setting are in here") 
cur = conn.cursor() 
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'])) 

jedoch einfügen, wenn ich dies laufe ich die folgende Fehlermeldung erhalten:

psycopg2.ProgrammingError: column "concert" does not exist 
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "... 

Aber " Konzert "ist keine Spalte, es ist ein Wert, also verstehe ich nicht, warum ich diesen Fehler bekomme.

EDIT - Ich habe versucht, \“um den Wert Konzert setzen und versuchte ohne

Wie kann ich meine Daten eingefügt mit aus diesen Fehlern

Antwort

12

Sie wirklich, wirklich nicht Python Zeichenfolge verwenden? Formatierung zum Erstellen von Abfragen - sie sind anfällig für SQL injection.Und Ihr tatsächliches Problem ist, dass Sie verwenden "für Zitate, während Sie verwenden müssen" für Zitate ("zitiert Tabellen-/Spaltennamen etc, 'zitiert Strings).

folgender Code stattdessen:

cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists'])) 

Beachten Sie, dass Sie %s verwenden müssen, egal welchen Typ Sie tatsächlich haben.

Siehe auch http://initd.org/psycopg/docs/usage.html#query-parameters.

+0

Danke, das wird dieser Fehler los, aber jetzt bekomme ich Ausnahmen.TypError: int Argument erforderlich. Das einzige der Felder, die ein int sein sollten, ist catname und es ist ein int. –

+0

Sie müssen '% s' für alle Werte verwenden, sogar für den int-Wert. Ich hatte es am Anfang falsch und dann meine Antwort bearbeitet. Möglicherweise haben Sie den falschen Code kopiert. – ThiefMaster