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

如何在Python中将超200列的大pandas dataframe插入SQL Server表

优化方案

方案1:使用pandas内置to_sql方法(最简便,无需手动处理列名)

该方案可自动匹配DataFrame列名与SQL表的字段名,完全不需要手动逐列编写字段,自带批量插入能力,性能远高于原逐行插入逻辑。

import pandas as pd
from sqlalchemy import create_engine

# 配置连接参数
server = 'yourservername' 
database = 'AdventureWorks' 
username = 'username' 
password = 'yourpassword'
# 可根据本地实际安装的驱动版本调整,比如也可以填{SQL Server}
driver = 'ODBC Driver 17 for SQL Server'

# 构建连接引擎,开启fast_executemany大幅提升批量插入速度
engine = create_engine(f'mssql+pyodbc://{username}:{password}@{server}/{database}?driver={driver}', fast_executemany=True)

# 直接写入数据,if_exists可根据需求选:append追加/replace覆盖/fail表存在时报错
df.to_sql(name='mytable', schema='dbo', con=engine, if_exists='append', index=False)

注意:需确保DataFrame的列名和SQL表的字段名完全一致,顺序不影响匹配;index=False表示不把DataFrame的索引列写入SQL表,如有对应需求可改为True

方案2:原生pyodbc自动拼接插入语句(无额外依赖)

如果不想引入SQLAlchemy依赖,可自动从DataFrame提取列名生成插入语句,同时用批量插入替代逐行遍历,性能和易用性都远高于原有实现。

import pyodbc
import pandas as pd

server = 'yourservername' 
database = 'AdventureWorks' 
username = 'username' 
password = 'yourpassword'

cnxn = pyodbc.connect(f'DRIVER={{SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}')
cursor = cnxn.cursor()
# 开启批量执行优化
cursor.fast_executemany = True

# 自动提取列名生成插入语句模板
columns = ', '.join(df.columns)
# 自动生成对应数量的参数占位符
placeholders = ', '.join(['?'] * len(df.columns))
insert_sql = f"INSERT INTO dbo.mytable ({columns}) VALUES ({placeholders})"

# 批量插入所有数据,替代逐行遍历
data = df.values.tolist()
cursor.executemany(insert_sql, data)

cnxn.commit()
cursor.close()
cnxn.close()

该方案不管表有多少列都通用,不用手动修改任何字段相关代码,批量插入效率比逐行插入高几十倍以上,数据量越大优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:18:02