Проблема для вставки с использованием 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 ..... 

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

  • Как скопировать каталог и его содержимое в существующее место с помощью Python?
  • Python: удаление символов, кроме цифр из строки
  • Как получить имя таблицы для выполненного запроса? (python / sqlite)
  • cx_freeze python single file?
  • Nump array integer / float division
  • Pandas не может читать файл hdf5, созданный с помощью h5py
  • Использование запросов python с страницами javascript
  • tkFileDialog не преобразовывает результаты в список Python в Windows
  • 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 - лучший язык программирования в мире.