sql >> Databasteknik >  >> RDS >> PostgreSQL

Problem för infogning med psycopg

INSERT satsen har ogiltig syntax. Det är något fel i for-slingan du nämner.
Du bör inkludera for-slingan i frågan.

INSERT I "DUMMY1km" (data) VÄRDEN ([[-3000 -3000 -3000 .....

En giltig sats kan se ut så här - förutsatt att din kolumn är av typen integer[] .
... som du också bör ha med i frågan.

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

eller

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

eller för en 2-dimensionell array (ser lite ut så i felmeddelandet):

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

eller

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

Mer om inmatning av matrisvärden i manualen.

Ergo:

matData[i] måste innehålla ARRAY[-3000, -3000] eller en av de andra listade varianterna av giltig syntax istället för [[-3000 -3000 -3000 ... vilket inte är giltigt för en heltalsmatris.

Psychopg konverterar automatiskt en PostgreSQL-array till en Python-lista . När du bygger INSERT måste du konvertera listan tillbaka till en array. Jag citerar härifrån:

Python lists are converted into PostgreSQL ARRAYs:

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

Ansvarsfriskrivning:Jag är expert på PostgreSQL, inte så mycket med Python. För någon som kan Python bättre än mig borde det vara lätt att formatera strängen därefter. Jag hittade ovanstående citat i en snabb research på webben.




  1. Hur man gör dynamiska postgres-förberedda uttalanden i PHP

  2. MED KONTROLL LÄGG TILL BEGRÄNSNING följt av KONTROLL BEGRÄNSNING vs. LÄGG TILL BEGRÄNSNING

  3. Hur man får en rad i SQLite efter index (inte efter id)

  4. Kan inte krympa "skrivskyddad" databas | Krympa transaktionslogg när du använder AlwaysOn Availability Group