pandas.to_sql使用基于'唯一ID'的新数据替换旧数据。

时间:2016-03-06 03:13:23

标签: python pandas sqlalchemy dataframe

我有一个pandas Dataframe,我已将其放入带有以下代码的sql中。

df = pandas.read_csv(io.StringIO(r))
pandas.DataFrame.to_sql(df, name='Database count details', con=engine)

示例数据

UNIQUE id   name          refreshed_at    values
2449205     ABC           2014-01-10      22
26019260    DEF           2016-03-04      51
26019261    GHI (1333)    2016-03-04      0.55

我的意图是每周运行一次代码,如果.db匹配,则将unique id文件中的数据替换为该周的数据。如果它不匹配,它将附加到.db文件。

我该怎么做?或者有更好的方法来执行此任务吗?

3 个答案:

答案 0 :(得分:0)

似乎并不是一个容易实现这一目标的功能。目前,我只是删除整个表,并重新创建一个新的表..

meta = MetaData()
table_to_drop = Table('Database count details', 
                       meta, autoload=True, autoload_with=engine)
table_to_drop.drop(engine)

答案 1 :(得分:0)

在运行to_sql之前,只需删除冲突的行。这是我更新实验结果的方法。

from sqlalchemy import select, delete, Table, MetaData
metadata = MetaData(engine)

experiment_name = 'base-20180608'
pipeline_proposals = Table('pipeline_proposals', metadata, autoload=True)
pipeline_proposals.delete().where(pipeline_proposals.c.experiment_name == experiment_name).execute()

proposals["experiment_name"]=experiment_name
proposals.to_sql("pipeline_proposals", con=engine, if_exists='append')

答案 2 :(得分:-2)

pandas.DataFrame.to_sql(df,name ='数据库计数详情',con =引擎,if_exists ='替换')

请参阅http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

处的to_sql的if_exists参数