sql >> Base de Datos >  >> RDS >> PostgreSQL

Problema para insertar usando psycopg

El INSERT La declaración tiene una sintaxis no válida. Hay algo mal dentro del bucle for que mencionas.
Debes incluir el bucle for en la pregunta.

INSERTAR EN "DUMMY1km" (datos) VALORES ([[-3000 -3000 -3000 .....

Una declaración válida podría verse así, suponiendo que su columna sea del tipo integer[] .
... que también debe incluir en la pregunta.

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

o

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

o para una matriz bidimensional (se parece un poco al mensaje de error):

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

o

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

Más información sobre la entrada de valores de matriz en el manual.

Ergo:

matData[i] debe contener ARRAY[-3000, -3000] o una de las otras variantes enumeradas de sintaxis válida en lugar de [[-3000 -3000 -3000 ... que no es válido para una matriz de enteros.

Psychopg convierte automáticamente una matriz PostgreSQL en una lista de Python . Al construir el INSERTAR, debe convertir la lista nuevamente en una matriz. Cito de aquí:

Python lists are converted into PostgreSQL ARRAYs:

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

Descargo de responsabilidad:soy un experto en PostgreSQL, no tanto en Python. Para alguien que conoce Python mejor que yo, debería ser fácil formatear la cadena en consecuencia. Encontré la cita anterior en una búsqueda rápida en la web.