Pandas to_sql() 更新数据库中的唯一值?
Pandas to_sql() to update unique values in DB?
如何使用 df.to_sql(if_exists = 'append')
仅附加数据框和数据库之间的唯一值。换句话说,我想评估 DF 和 DB 之间的重复项,并在写入数据库之前删除这些重复项。
这个有参数吗?
我知道参数 if_exists = 'append'
和 if_exists = 'replace'
是针对整个 table - 而不是唯一的条目。
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
我坚持这个,所以非常感谢你的帮助。 -谢谢
在 pandas 中,在 to_sql
中没有方便的参数来仅将非重复项附加到最终的 table。考虑使用 pandas 总是 替换的暂存临时 table,然后 运行 最终附加查询将临时 table 记录迁移到最终table 仅考虑使用 NOT EXISTS
子句的唯一 PK。
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 集成关系数据库中都是兼容的。
如何使用 df.to_sql(if_exists = 'append')
仅附加数据框和数据库之间的唯一值。换句话说,我想评估 DF 和 DB 之间的重复项,并在写入数据库之前删除这些重复项。
这个有参数吗?
我知道参数 if_exists = 'append'
和 if_exists = 'replace'
是针对整个 table - 而不是唯一的条目。
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
我坚持这个,所以非常感谢你的帮助。 -谢谢
在 pandas 中,在 to_sql
中没有方便的参数来仅将非重复项附加到最终的 table。考虑使用 pandas 总是 替换的暂存临时 table,然后 运行 最终附加查询将临时 table 记录迁移到最终table 仅考虑使用 NOT EXISTS
子句的唯一 PK。
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 集成关系数据库中都是兼容的。