将在 Python 中创建的 Pandas 数据框插入 SQL Server

Chr*_*ris 6 sql-server pyodbc python-3.x pandas

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

通常,在 SQL 中,我会'select * into myTable from dataTable'调用执行插入操作,但是位于 Pandas 数据帧中的数据显然使这变得复杂。

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

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

Gor*_*son 5

this answer所示,我们可以df通过这样做将命名的DataFrame转换为元组列表,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()
Run Code Online (Sandbox Code Playgroud)

这与您将获得的“本机”一样,但如果 DataFrame 包含 pyodbc 无法识别的 pandas 数据类型(它期望 Python 类型作为参数值),则可能会导致错误。使用 SQLAlchemy 和 pandas 的to_sql方法可能仍然更好。