PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Problem beim Einfügen mit psycopg

Das INSERT Anweisung hat eine ungültige Syntax. In der von Ihnen erwähnten for-Schleife ist etwas falsch.
Sie sollten die for-Schleife in die Frage einbeziehen.

IN „DUMMY1km“ (Daten) WERTE EINFÜGEN ([[-3000 -3000 -3000 .....

Eine gültige Anweisung könnte wie folgt aussehen – vorausgesetzt, Ihre Spalte ist vom Typ integer[] .
... die Sie auch in die Frage aufnehmen sollten.

INSERT INTO "DUMMY1km"(data) VALUES ('{-3000, -3000}'::int[])

oder

INSERT INTO "DUMMY1km"(data) VALUES (ARRAY[-3000, -3000])  -- note the "ARRAY"

oder für ein 2-dimensionales Array (sieht in der Fehlermeldung ungefähr so ​​aus):

INSERT INTO "DUMMY1km"(data) VALUES ('{{-3000, -3000}, {-3000, -3000}}'::int[])

oder

INSERT INTO "DUMMY1km"(data) VALUES (ARRAY[[-3000, -3000],[-3000, -3000]])

Mehr zur Eingabe von Array-Werten im Handbuch.

Ergo:

matData[i] muss ARRAY[-3000, -3000] enthalten oder eine der anderen aufgeführten Varianten gültiger Syntax anstelle von [[-3000 -3000 -3000 ... was für ein Integer-Array nicht gültig ist.

Psychopg konvertiert automatisch ein PostgreSQL-Array in eine Python-Liste . Beim Erstellen des INSERT müssen Sie die Liste wieder in ein Array konvertieren. Ich zitiere von hier:

Python lists are converted into PostgreSQL ARRAYs:

>>> cur.mogrify("SELECT %s;", ([10, 20, 30], ))
'SELECT ARRAY[10, 20, 30];'

Haftungsausschluss:Ich bin ein Experte für PostgreSQL, nicht so sehr für Python. Für jemanden, der Python besser kennt als ich, sollte es einfach sein, den String entsprechend zu formatieren. Ich habe das obige Zitat bei einer kurzen Recherche im Internet gefunden.