You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将dataframe中的数据更新至对应数据库表

实现DataFrame更新到数据表的操作方法

首先需要安装依赖库,根据你使用的数据库类型选择对应的驱动,以MySQL为例:

  • 安装命令:pip install pandas sqlalchemy pymysql
    其他数据库替换对应驱动即可:PostgreSQL用psycopg2-binary,SQL Server用pymssql。

第一步:创建数据库连接

import pandas as pd
from sqlalchemy import create_engine, text

# 连接串格式:数据库驱动://用户名:密码@数据库地址:端口/库名
engine = create_engine('mysql+pymysql://your_username:your_password@127.0.0.1:3306/your_db_name')

场景1:全量覆盖/追加写入目标表

直接使用pandas自带的to_sql方法即可实现:

df.to_sql(
    name="your_target_table", # 目标表名
    con=engine,
    if_exists="replace", # 写入规则:replace=全量覆盖旧表,append=追加到旧表末尾,fail=表存在就报错
    index=False, # 不写入DataFrame的索引列
    chunksize=1000 # 数据量大时分批写入,避免内存溢出
)

注意:追加写入时需要保证DataFrame的字段名、字段类型和目标表完全一致,否则会抛出异常。

场景2:按主键增量更新(已有主键数据更新,无主键数据插入)

to_sql原生不支持增量更新,可通过两种方式实现:

方式1:先删后插(适合小数据量场景)

# 假设主键字段为id,先删除目标表中和当前DataFrame主键重复的旧数据
pk_list = df["id"].tolist()
with engine.connect() as conn:
    conn.execute(
        text(f"DELETE FROM your_target_table WHERE id IN ({','.join(['%s']*len(pk_list))})"),
        tuple(pk_list)
    )
    conn.commit()
# 再写入新数据
df.to_sql(name="your_target_table", con=engine, if_exists="append", index=False)

方式2:使用数据库原生UPSERT语法(性能更高,适合大数据量)

不同数据库语法略有差异,以MySQL的ON DUPLICATE KEY UPDATE为例:

# 拼接SQL语句
cols = ", ".join(df.columns)
placeholders = ", ".join(["%s"] * len(df.columns))
# 主键之外的字段触发更新时覆盖为新值
update_logic = ", ".join([f"{col}=VALUES({col})" for col in df.columns if col != "id"])
upsert_sql = f"""
INSERT INTO your_target_table ({cols})
VALUES ({placeholders})
ON DUPLICATE KEY UPDATE {update_logic}
"""

# 批量执行
data_list = df.values.tolist()
with engine.connect() as conn:
    conn.execute(text(upsert_sql), data_list)
    conn.commit()

如果是PostgreSQL,将更新逻辑替换为ON CONFLICT (id) DO UPDATE SET语法即可,SQL Server使用MERGE语法实现。

内容的提问来源于stack exchange,提问作者Naren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:27:03