Проблема Psycopg2 со вставкой строк

#python #postgresql #psycopg2

#python #postgresql #psycopg2

Вопрос:

Я получаю следующую ошибку при попытке вставить через python:

 TypeError: not all arguments converted during string formatting
  

Это первая строка, которую я хочу вставить в качестве примера:

 (Timestamp('2019-01-31 00:00:00'),
 Timestamp('2018-10-03 00:00:00'),
 'APP-552498',
 'Company Name Lawyer',
 'Funded',
 36500,
 1095.0,
 1.35,
 49275.0,
 15509.0,
 251.0,
 'Daily',
 1825.0,
 196.31,
 78,
 0.0,
 'Law Offices',
 NaT,
 '',
 'CO',
 8.4,
 'Company Name',
 0.7647,
 38003.68,
 7154.34,
 'West',
 33766.0,
 'N')
  

С помощью вышеупомянутых команд для вставки:

 df_svc_vals = [tuple(x) for x in df.values]
c.execute("""INSERT INTO schema.table VALUES (%s)""", df_svc_vals[0])
c.executemany("""INSERT INTO schema.table VALUES (%s)""", df_svc_vals)
  

Кроме того, когда я фактически копирую данные в отдельный CSV и загружаю напрямую в БД, данные вставляются правильно.

Я ввел первые два столбца в качестве типа date, каждый столбец с числом как реальный, а строки как изменяющиеся символы. Кроме того, столбец с NaT является столбцом даты, это просто нулевое значение (так выглядит в pandas).

Как я могу обойти эту проблему?

Комментарии:

1. Вам нужно %s для каждого столбца таблицы внутри скобок, (%s) .

Ответ №1:

вам нужно указать «%s» для каждого значения, чтобы вы могли сделать это следующим образом (это приведет к «ВСТАВКЕ В ЗНАЧЕНИЯ schema.table (%s,%s,%s,….,%s))

 "INSERT INTO schema.table VALUES (" (",".join(["%s"]*len(df_svc_vals[o]))) ")"
  

итак, в целом, вы можете сделать что-то вроде этого

 c.executemany("INSERT INTO schema.table VALUES (" (",".join(["%s"]*len(df_vals[0]))) ")", df_svc_vals)