2017-12-17 5 views
0

Ich versuche, INSERT Werte in einer Postgresql-Tabelle. In meinem Python-Code gibt es zwei zurückgegebene Werte a und b aus verschiedenen Funktionen. a und b sind tuples.Einfügen von Daten in PostgreSQL mit Python

wie

a = ('cat', 'dog', 'tree') 
b = ('city', 'town', 'road') 

Datenbank Tabellenname ist description mit sechs Spalten. Ich verwende

cur.execute("INSERT INTO description VALUES(?,?,?,?,?,?)",(a + b)) 

Ich möchte die Werte in dieser Tabelle anhängen. Aber es zeigt Fehler, Error syntax error at or near "," Gibt es einen anderen Weg oder sollte ich es in list von tuple konvertieren?

Antwort

0

Python hat keinen (einzelnen) Standard-Platzhalterwert für parametrisierte Abfragen. SQLite verwendet ?, aber MySQL und PostgreSQL-Treiber verwenden %s (für alle Datentypen, nicht nur Strings):

cur.execute("INSERT INTO description VALUES(%s,%s,%s,%s,%s,%s)", (a + b)) 
0

Versuchen Spezifizierer mit% s als Format es funktionieren würde.

0

Wie Blender gesagt, Sie tun es nur mit %s in Ordnung sein! aber da Sie ein Tier auf Ihre Daten haben, können Sie vielleicht pg Array verwenden, um diese Tierart auf dem gleichen Feld zu speichern!

create table description (a char(16), b char(16), c char(16), d char(16), e char(16), f char(16)); 

Sie können einfach, indem Sie Ihre Daten zu speichern:

INSERT INTO Beschreibung VALUES ('Hund', 'Katze', 'Baum', 'Stadt', 'Stadt', 'Straße')

ABER, wenn Ihre Tiere vielleicht incr, so ist der bessere Weg array.

create table description2 (animals char(16)[], d char(16), e char(16), f char(16)); 

und setzen Sie Ihre Daten so.

INSERT INTO description2 VALUES(ARRAY ['dog', 'cat', 'tree'], 'city', 'town', 'road'); 

und dann können Sie einfach durch Ihre Daten zu erhalten:

select * from description2; 

PG ist gute Datenbank, haben viele type verwendet werden können!

Verwandte Themen