Панды to_sql(), чтобы обновить уникальные значения в БД?
Как я могу использовать df.to_sql(if_exists = 'append')
добавлять ТОЛЬКО уникальные значения между фреймом данных и базой данных. Другими словами, я хотел бы оценить дубликаты между DF и DB и удалить эти дубликаты перед записью в базу данных.
Есть ли параметр для этого?
Я понимаю, что параметры if_exists = 'append'
а также if_exists = 'replace'
это для всей таблицы - не уникальные записи.
I am using:
sqlalchemy
pandas dataframe with the following datatypes:
index: datetime.datetime <-- Primary Key
float
float
float
float
integer
string <--- Primary Key
string<---- Primary Key
Я застрял на этом, поэтому ваша помощь очень ценится. -Спасибо
1 ответ
В пандах нет удобного аргумента в to_sql
добавлять только не дубликаты к финальной таблице. Подумайте об использовании промежуточной временной таблицы, которую pandas всегда заменяет, а затем выполните последний запрос на добавление, чтобы перенести записи временной таблицы в окончательную таблицу с учетом только уникальных PK с использованием NOT EXISTS
пункт.
engine = sqlalchemy.create_engine(...)
df.to_sql(name='myTempTable', con=engine, if_exists='replace')
with engine.begin() as cn:
sql = """INSERT INTO myFinalTable (Col1, Col2, Col3, ...)
SELECT t.Col1, t.Col2, t.Col3, ...
FROM myTempTable t
WHERE NOT EXISTS
(SELECT 1 FROM myFinalTable f
WHERE t.MatchColumn1 = f.MatchColumn1
AND t.MatchColumn2 = f.MatchColumn2)"""
cn.execute(sql)
Это было бы решение ANSI SQL и не ограничивалось бы методами, специфичными для поставщика, такими как UPSERT
и так совместим практически со всеми SQL-интегрированными реляционными базами данных.