PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Problema para inserir usando psycopg


O INSERT instrução tem sintaxe inválida. Há algo errado dentro do loop for que você mencionou.
Você deve incluir o loop for na pergunta.

INSERIR EM "DUMMY1km" (dados) VALORES ([[-3000 -3000 -3000 .....

Uma instrução válida pode ser assim - supondo que sua coluna seja do tipo integer[] .
... que você também deve incluir na pergunta.
INSERT INTO "DUMMY1km"(data) VALUES ('{-3000, -3000}'::int[])

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

ou para uma matriz bidimensional (parece um pouco como na mensagem de erro):
INSERT INTO "DUMMY1km"(data) VALUES ('{{-3000, -3000}, {-3000, -3000}}'::int[])

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

Mais sobre a entrada de valor de matriz no manual.

Portanto:


matData[i] precisa conter ARRAY[-3000, -3000] ou uma das outras variantes listadas de sintaxe válida em vez de [[-3000 -3000 -3000 ... que não é válido para uma matriz de inteiros.

O Psychopg converte automaticamente um matriz PostgreSQL em uma lista Python . Ao construir o INSERT, você precisa converter a lista de volta em um array. Cito daqui:
Python lists are converted into PostgreSQL ARRAYs:

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

Isenção de responsabilidade:sou especialista em PostgreSQL, não tanto em Python. Para alguém que conhece Python melhor do que eu, deve ser fácil formatar a string de acordo. Encontrei a citação acima em uma rápida pesquisa na web.