2017-05-26 1 views
0

Angesichts der Postgres Abfrage umgewandelt:Postgres: nicht alle Argumente während Zeichenfolge Formatierung

INSERT INTO net.bgp_communities (comm_name, comm_value) VALUES (%s, %s) ; 

und die Daten

('blabla', 'target:*:*') 

die resultierende Abfrage (mit mogrify)

INSERT INTO net.bgp_communities (comm_name, comm_value) VALUES ('blabla', 'target:*:*') ; 

die Ursachen

TypeError('not all arguments converted during string formatting',) 

Ich glaube, dass der Fehler aus dem Tupel nicht , am Ende kommt? Aber wie kann das gelöst werden?

EDIT:

beschreibt, wie die Abfrage zusammen mit dem Tupel gerendert wird mit psycopg2

curs.executemany("""INSERT INTO net.bgp_communities (comm_name, comm_value) VALUES (%s, %s)""", msg) 
+2

Das abschließende ',' am Ende eines 'Tupel' ist nur erforderlich, wenn das Tupel nur ein Element hat. Z.B. '('a',)' ist ein Tupel, '('a')' nicht. – Kendas

+0

danke! eine Idee, wer zu entkommen gegeben, wie 'psycopg2' die Abfrage rendert? – iamsterdam

+0

Bitte zeigen Sie den genauen Aufruf von 'mogrify' an, der den Fehler verursacht. – chepner

Antwort

0

in den Kommentaren gelöst:
Beachten Sie, dass executemany erwartet eine iterable Argumentationssätze -

cursor.executemany("INSERT INTO sometable (id, somefield) VALUES (%s, %s)", [(1, 'a'), (2, 'b')]) 

sollte korrekt sein, während

cursor.executemany("INSERT INTO sometable (id, somefield) VALUES (%s, %s)", (1, 'a')) 

falsch sein sollte. - Kendas

Verwandte Themen