代码之家  ›  专栏  ›  技术社区  ›  Chris

将在python中创建的pandas数据框插入到sql server中

  •  2
  • Chris  · 技术社区  · 6 年前

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

    通常,在sql中 'select * into myTable from dataTable' 调用以执行插入操作,但位于pandas数据帧中的数据显然会使此复杂化。

    我并不正式反对使用sqlalchemy(尽管我更希望避免再次下载和安装),但我更希望在python中以本机方式进行,并使用pyodbc连接到ssms。

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   ADataGMan    6 年前

    如图所示 this answer 我们可以转换名为 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()
    

    这是“本机的”,但如果数据帧包含pyodbc无法识别的pandas数据类型(pyodbc期望python类型作为参数值),则可能会导致错误。使用sqlalchemy和pandas可能更好 to_sql 方法。