如前所述,我在Python中创建了一个数据集合(40k行,5列(,我想将其插入SQL Server表中。
通常,在SQL中,我会调用'select * into myTable from dataTable'
来进行插入,但pandas数据帧中的数据显然会使这变得复杂。
我并不正式反对使用SQLAlchemy(尽管我更喜欢避免另一次下载和安装(,但我更喜欢在Python中原生地这样做,并且正在使用pyodbc连接到SSMS。
有没有一种简单的方法可以避免循环(即逐行插入(?
如此答案所示,我们可以通过执行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无法识别的panda数据类型(它需要Python类型作为参数值(,则可能会导致错误。使用SQLAlchemy和Panda的to_sql
方法可能会更好。