我试图查询MySql数据库表的子集,将结果提供给Pandas DataFrame,更改一些数据,然后将更新的行写回同一个表.我的表大小约为1MM行,我将要改变的行数相对较小(<50,000),因此返回整个表并执行a df.to_sql(tablename,engine, if_exists='replace')不是一个可行的选择.是否有一种直接的方法来更新已更改的行而不迭代DataFrame中的每一行?
我知道这个项目,它试图模拟"upsert"工作流程,但它似乎只完成了插入新的非重复行而不是更新现有行的部分的任务:
以下是我试图以更大规模完成的内容的框架:
import pandas as pd
from sqlalchemy import create_engine
import threading
#Get sample data
d = {'A' : [1, 2, 3, 4], 'B' : [4, 3, 2, 1]}
df = pd.DataFrame(d)
engine = create_engine(SQLALCHEMY_DATABASE_URI)
#Create a table with a unique constraint on A.
engine.execute("""DROP TABLE IF EXISTS test_upsert """)
engine.execute("""CREATE TABLE test_upsert (
A INTEGER,
B INTEGER,
PRIMARY KEY (A))
""")
#Insert data using pandas.to_sql
df.to_sql('test_upsert', engine, if_exists='append', index=False)
#Alter row where …Run Code Online (Sandbox Code Playgroud)