sql-server - 将 Python 中创建的 pandas 数据框插入 SQL Server
问题描述
如前所述,我在 Python 中创建了一个数据集合(40k 行,5 列),我想将其插入 SQL Server 表中。
通常,在 SQL 中,我会'select * into myTable from dataTable'
调用执行插入操作,但熊猫数据框中的数据显然会使这复杂化。
我并没有正式反对使用 SQLAlchemy(尽管希望避免再次下载和安装),但更愿意在 Python 中本地执行此操作,并使用 pyodbc 连接到 SSMS。
有没有一种直接的方法可以避免循环(即逐行插入)?
解决方案
如这个答案所示,我们可以通过这样做将一个名为的 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 的方法可能会更好。
推荐阅读
- javascript - 在Vue中将数据从孩子传递给孩子
- javascript - 如何将获取的 JSON 保存在变量中 [node-fetch]
- java - 抛出异常后如何断言没有调用方法?
- html - 如何修复innerText中的样式
- android - 我们如何将来自同一提供商的子域添加到基于 TWA 的 Android 应用程序?
- php - 为什么我到控制器的新路由不起作用,而旧路由正常工作?
- python - 使用 Tensorflow 1.x 时,如何规避由静态形状引起的 TypeError,同时仍然坚持使用 `[None]` 形状?
- kotlin - 与抽象类绑定的交叉引用
- python - PyLint 无法识别 PySide 对象
- jquery - 改变水平位置时动画随机闪烁