Ошибка вставки значения в таблицу Postgres с помощью psycopg2 - PullRequest
0 голосов
/ 06 января 2020

Я пытался использовать этот кусок кода:

# df is the dataframe
if len(df) > 0:
df_columns = list(df)
# create (col1,col2,...)
columns = ",".join(df_columns)

# create VALUES('%s', '%s",...) one '%s' per column
values = "VALUES({})".format(",".join(["%s" for _ in df_columns])) 

#create INSERT INTO table (columns) VALUES('%s',...)
insert_stmt = "INSERT INTO {} ({}) {}".format(table,columns,values)

cur = conn.cursor()
cur = db_conn.cursor()
psycopg2.extras.execute_batch(cur, insert_stmt, df.values)
conn.commit()
cur.close()

Чтобы я мог подключиться к Postgres БД и вставить значения из df.

Я получаю эти 2 ошибки для этого кода:

LINE 1: INSERT INTO mrr.shipments (mainFreight_freight_motherVesselD...

psycopg2.errors.UndefinedColumn: column "mainfreight_freight_mothervesseldepartdatetime" of relation "shipments" does not exist

по какой-то причине столбцы не могут получить значения должным образом

Что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 06 января 2020

Вы не должны делать свою собственную интерполяцию строк; пусть psycopg2 справится с этим. Начиная с документов :

Предупреждение Никогда, никогда, НИКОГДА не используйте Python конкатенацию строк (+) или интерполяцию строковых параметров (%) для передачи переменных в запрос SQL строка. Даже под дулом пистолета.

Поскольку у вас также есть динамические c имена столбцов, вы должны использовать psycopg2. sql, чтобы создать инструкцию, а затем использовать стандартный метод передача параметров запроса в psycopg2 вместо использования формата.

...