【问题标题】:Insert pandas dataframe created within Python into SQL Server将 Python 中创建的 pandas 数据框插入 SQL Server
【发布时间】:2019-04-10 06:09:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql-server python-3.x pandas pyodbc


    【解决方案1】:

    this answer 所示,我们可以通过list(df.itertuples(index=False, name=None) 将名为df 的DataFrame 转换为元组列表,这样我们就可以将其传递给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 类型作为参数值),它可能会导致错误。使用 SQLAlchemy 和 pandas 的 to_sql 方法可能会更好。

    【讨论】:

    • 谢谢...从字里行间看,听起来你会断言 SQLAlchemy 是一个更可取的选择?
    • “SQLAlchemy 是所有方面的首选” - 我总是对绝对问题持怀疑态度。在许多情况下,我会提倡KISS principle,但在这种情况下,您使用的是 pandas,他们基本上将数据库访问层“外包”给了 SQLAlchemy,因此您可以从 pandas 的内置-在数据库互操作性方面,不必自己重新发明轮子。
    • 我自己尽量保持简单,部分原因是我想尽可能避免额外下载...实际上昨晚下载 SQLAlchemy 时遇到了问题(这里的防火墙可能是一个真正的熊)。
    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2013-07-02
    • 2018-11-29
    • 2016-07-17
    • 2022-01-18
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多