使用Python无法正常插入SQL Server

时间:2017-10-20 04:13:20

标签: python sql-server etl

我正在尝试将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脚本中执行它时,脚本会运行,但表中没有数据。我错过了什么?

更新:事实证明批量插入普通表也不起作用。

3 个答案:

答案 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)