首页 > 解决方案 > 将 Python 中创建的 pandas 数据框插入 SQL Server

问题描述

如前所述,我在 Python 中创建了一个数据集合(40k 行,5 列),我想将其插入 SQL Server 表中。

通常,在 SQL 中,我会'select * into myTable from dataTable'调用执行插入操作,但熊猫数据框中的数据显然会使这复杂化。

我并没有正式反对使用 SQLAlchemy(尽管希望避免再次下载和安装),但更愿意在 Python 中本地执行此操作,并使用 pyodbc 连接到 SSMS。

有没有一种直接的方法可以避免循环(即逐行插入)?

标签: sql-serverpython-3.xpandaspyodbc

解决方案


如这个答案所示,我们可以通过这样做将一个名为的 DataFrame 转换df为一个元组列表,list(df.itertuples(index=False, name=None)这样我们就可以将其传递给executemany而无需(显式)循环遍历每一行。

crsr = cnxn.cursor()
crsr.fast_executemany = True
crsr.executemany(
    "INSERT INTO #tablename (col1, col2) VALUES (?, ?)",
    list(df.itertuples(index=False, name=None))
)
crsr.commit()

这是您将获得的“原生”,但如果 DataFrame 包含 pyodbc 无法识别的 pandas 数据类型(它需要 Python 类型作为参数值),它可能会导致错误。to_sql使用 SQLAlchemy 和 pandas 的方法可能会更好。


推荐阅读