У меня есть пандас DataFrame, который мне нужно сохранить в базе данных.Вот моя текущая строка кода для вставки:
df.to_sql(table,con=engine,if_exists='append',index_label=index_col)
Это прекрасно работает, если в моей таблице нет ни одной строки в df
.Если строка уже существует, я получаю эту ошибку:
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key
value violates unique constraint "mypk"
DETAIL: Key (id)=(42) already exists.
[SQL: 'INSERT INTO mytable (id, owner,...) VALUES (%(id)s, %(owner)s,...']
[parameters:...] (Background on this error at: http://sqlalche.me/e/gkpj)
и ничего не вставляется.
PostgreSQL имеет необязательное предложение ON CONFLICT
, которое можно использовать для UPDATE
существующей таблицыстрок.Я прочитал всю справочную страницу pandas.DataFrame.to_sql , и я не смог найти способ использовать ON CONFLICT
в функции DataFrame.to_sql()
.
Я решил разделить свой DataFrame на двана то, что уже в таблице БД.Итак, теперь у меня есть два DataFrames, insert_rows
и update_rows
, и я могу безопасно выполнить
insert_rows.to_sql(table, con=engine, if_exists='append', index_label=index_col)
Но тогда, похоже, нет UPDATE
эквивалента DataFrame.to_sql()
.Итак, как мне обновить таблицу с помощью DataFrame update_rows
?