Проблема для вставки с использованием psycopg

Я читаю данные из файла .mat с помощью модуля Pytables. После прочтения данных я хочу вставить эти данные в базу данных с помощью psycopg. Вот пример кода:

file = tables.openFile(matFile) x = 0 #populate the matData list for var in dest: data = file.getNode('/' + var)[:] matData.append(data) x = x+1 #insert into db for i in range(0,x): cur.execute("""INSERT INTO \"%s\" (%s) VALUES (%s)""" % tableName,dest[i],matData[i]) ) 

Я получаю следующую ошибку:

 Traceback (most recent call last): File "./loadDBFromMAT.py", line 111, in <module> readInputFileAndLoad(args.matFileName,args.tableName) File "./loadDBFromMAT.py", line 77, in readInputFileAndLoad cur.execute("INSERT INTO \"%s\" (%s) VALUES (%s)" % (tableName,dest[i],matData[i]) ) psycopg2.ProgrammingError: syntax error at or near "[" LINE 1: INSERT INTO "DUMMY1km" (data) VALUES ([[-3000 -3000 -3000 ..... 

Было бы здорово, если бы кто-нибудь мог предложить обходное решение для этого. Благодаря!

One Solution collect form web for “Проблема для вставки с использованием psycopg”

Оператор INSERT имеет недопустимый синтаксис. Там что-то не так внутри цикла, о котором вы упоминаете.
Вы должны включить цикл for в вопрос.

INSERT INTO «DUMMY1km» (данные) ЗНАЧЕНИЯ ([[-3000 -3000 -3000 …..

Правильный оператор может выглядеть так: если ваш столбец имеет тип integer[] .
… которые вы также должны включить в вопрос.

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

или

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

или для 2-мерного массива (выглядит так же, как в сообщении об ошибке msg.):

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

или

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

Подробнее о вводе значения массива в руководстве.

Ergo:

matData [i] должен содержать ARRAY[-3000, -3000] или один из других перечисленных вариантов допустимого синтаксиса вместо [[-3000 -3000 -3000 ... который недопустим для целочисленного массива.

Psychopg автоматически преобразует массив PostgreSQL в список Python . При создании INSERT вам нужно преобразовать список обратно в массив. Я цитирую здесь :

 Python lists are converted into PostgreSQL ARRAYs: >>> cur.mogrify("SELECT %s;", ([10, 20, 30], )) 'SELECT ARRAY[10, 20, 30];' 

Отказ от ответственности: Я эксперт в PostgreSQL, не столько с Python. Для кого-то, кто знает Python лучше меня, нужно легко форматировать строку. Я нашел приведенную выше цитату в быстром исследовании в Интернете.

Python - лучший язык программирования в мире.