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。
有没有一种直接的方法可以避免循环(即逐行插入)?
如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方法可能仍然更好。
| 归档时间: |
|
| 查看次数: |
8776 次 |
| 最近记录: |