qq_36429736 2022-06-07 22:19 采纳率: 75%
浏览 110
已结题

sqlalchemy批量upsert

怎样使用sqlchemy 将pandas upsert至mysql数据库。目前我只能使用以下方法遍历df的每一行然后执行upsert。有没有什么方法可以批量upsert呢?ps:订单数据表的订单号字段为主键
from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table
db_conn = create_engine(
    'mysql+pymysql://root:****@localhost:****/****', # 密码 端口即schma已隐藏
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=60  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
df = pd.read_csv(r"D:\订单信息", engine='python', delimiter=",",encoding="gbk"}).fillna("")
df_dict = df.to_dict('records')
metadata = MetaData(db_conn)
user_table = Table('订单数据', metadata, autoload=True)
for d in df_dict:
    on_duplicate_key_stmt = insert(user_table).values(d).on_duplicate_key_update(d)
    db_conn.execute(on_duplicate_key_stmt)
  • 写回答

3条回答 默认 最新

  • FlyingPig_chen 2022-06-09 11:19
    关注
    
    db_conn.session.bulk_update_mappings(
        user_table,  # 当前映射类
        [*df_dict]  # 列表里套的是字典打散
    )
    db_conn.session.commit()
    
    # 注意点 批量更新要的是ID字段 需要注意ID填写
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 赞助了问题酬金10元 6月8日
  • 创建了问题 6月7日