我正在尝试将csv批量插入SQL Server中的表中。问题是,数据与目标表的列不匹配。目标表有几个在源文件中找不到的审计列。我找到的解决方案是插入到视图中。代码非常简单:
from sqlalchemy import create_engine
engine = create_engine('mssql+pyodbc://[DNS]')
conn = engine.connect()
sql = "BULK INSERT [table view] FROM '[source file path]' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')"
conn.execute(sql)
conn.close()
当我在SSMS中运行SQL语句时,它运行得很好。当我尝试从Python脚本中执行它时,脚本会运行,但表中没有数据。我错过了什么?
更新:事实证明批量插入普通表也不起作用。
答案 0 :(得分:0)
事实证明,我不得不使用SQL Alchemy,而是使用pypyodbc。不知道为什么这有效,而另一种方式则没有。此处的示例代码:How to Speed up with Bulk Insert to MS Server from Python with Pyodbc from CSV
答案 1 :(得分:0)
在关闭连接之前,需要调用commit(),否则SQL操作将在连接关闭时回滚。
conn.commit()
conn.close()
答案 2 :(得分:0)
在选中sqlalchemy transactions refeference后,这对我有用。我没有明确将conn.commit()
设置为
由每个.begin()方法管理的块具有这样的行为,使得该块完成时将提交事务。
with engine.begin() as conn:
conn.execute(sql_bulk_insert)