#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)