如何使用熊猫更新/插入(更新插入)一个大表块



有一个大表需要使用python pandas库和一个新的数据帧(包含最新数据(进行更新(更新/插入(。

考虑到整个表格,我可以做到这一点。但是由于桌子很重,将来会变得更重,我正在寻找桌子上的更新插入选项。

下面的代码是更新插入的当前代码,table.data_frame2是新的数据框(包含最新数据(。

engine = create_engine("mysql+pymysql://username:password@hostname/schema")
con = engine.connect()
sql1 = "select * from table1"
df1 = pd.read_sql(sql1, con)
#(upsert code starts),can below code be converted into chunkwise upsert
#data_frame2 is the data frame with latest data/new data.
df_final = pd.concat([df1, data_frame2[~data_frame2.index.isin(df1.index)]])
df_final.update(data_frame2)
#upsert code ends
#writing data chunkwise
df_final.to_sql(con=con,name='table1',if_exists='replace',chunksize=100000)

我在网上进行了研究,但无法找到一种方法,我们可以在熊猫数据帧中使用新数据的表上进行逐块 upsert(更新/插入(。请建议如何做到这一点。

它更像是一个数据库任务,而不是python任务。如果数据增长,您的本地内存将如何管理它?因此,繁重的部分应该在我的SQL服务器中完成,这样您就不需要下载数据并进行任何更新。因此,要做到这一点,您需要:

  • 在数据库中创建一个包含 df1 列的临时/临时(例如表 2(表并约束
  • df1插入到数据库中的临时表2
  • 使用 MySQL 连接器创建数据库对象和游标

    import pymysql
    conn = pymysql.connect(host='', port='', user='', passwd='', db='')
    cur = conn.cursor()
    sql_update_string = "update ..." # join table1 and table2 and update the common ids in table1
    
  • 使用 python 光标执行更新任务并关闭光标

    cur.execute(sql_update_string)
    cur.close()
    

最新更新