PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Problema per l'inserimento usando psycopg

Il INSERT l'istruzione ha una sintassi non valida. C'è qualcosa che non va all'interno del ciclo for che menzioni.
Dovresti includere il ciclo for nella domanda.

INSERIRE IN "DUMMY1km" (dati) VALORI ([[-3000 -3000 -3000 .....

Un'istruzione valida potrebbe assomigliare a questa, supponendo che la tua colonna sia di tipo integer[] .
... che dovresti includere anche nella domanda.

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

o

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

o per un array bidimensionale (sembra un po' come quello nel messaggio di errore):

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

o

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

Maggiori informazioni sull'immissione del valore dell'array nel manuale.

Ergo:

matData[i] deve contenere ARRAY[-3000, -3000] o una delle altre varianti elencate di sintassi valida invece di [[-3000 -3000 -3000 ... che non è valido per una matrice intera.

Psychopg converte automaticamente un array PostgreSQL in un elenco Python . Quando si compila INSERT, è necessario riconvertire l'elenco in un array. Cito da qui:

Python lists are converted into PostgreSQL ARRAYs:

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

Disclaimer:sono un esperto di PostgreSQL, non tanto di Python. Per qualcuno che conosce Python meglio di me, dovrebbe essere facile formattare la stringa di conseguenza. Ho trovato la citazione sopra in una rapida ricerca sul web.