PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Problème d'insertion à l'aide de psycopg

Le INSERT l'instruction a une syntaxe non valide. Il y a quelque chose qui ne va pas dans la boucle for que vous mentionnez.
Vous devriez inclure la boucle for dans la question.

INSÉRER DANS "DUMMY1km" (données) VALEURS ([[-3000 -3000 -3000 .....

Une déclaration valide pourrait ressembler à ceci - en supposant que votre colonne est de type integer[] .
... que vous devez également inclure dans la question.

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

ou

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

ou pour un tableau à 2 dimensions (ressemble un peu à ça dans le message d'erreur) :

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

ou

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

Plus d'informations sur la saisie de valeurs de tableau dans le manuel.

Ergo :

matData[i] doit contenir ARRAY[-3000, -3000] ou l'une des autres variantes répertoriées de syntaxe valide au lieu de [[-3000 -3000 -3000 ... qui n'est pas valide pour un tableau d'entiers.

Psychopg convertit automatiquement un tableau PostgreSQL dans une liste Python . Lors de la construction de l'INSERT, vous devez reconvertir la liste en tableau. Je cite d'ici :

Python lists are converted into PostgreSQL ARRAYs:

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

Avis de non-responsabilité :je suis un expert de PostgreSQL, pas tellement de Python. Pour quelqu'un qui connaît Python mieux que moi, il devrait être facile de formater la chaîne en conséquence. J'ai trouvé la citation ci-dessus lors d'une recherche rapide sur le Web.