【发布时间】:2017-11-14 14:37:00
【问题描述】:
我在尝试更新作为 SQL Server db 上的链接服务器的 db2 数据库时遇到此错误。
ERROR:root:('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法执行请求的操作,因为链接服务器“iSeries”的 OLE DB 提供程序“IBMDA400”确实不支持所需的事务接口。(7390) (SQLExecDirectW)')
我正在通过 pyodbc 连接到 sql server,并且可以毫无问题地运行 sql 脚本。这是我得到错误的sql
sql3 = " exec ('UPDATE SVCEN2DEV.SRVMAST SET SVRMVD = ? WHERE svtype != ''*DCS-'' AND svcid = ? and svacct = ? ') AT [iSeries]"
db.execute(sql3, (row[2],srvid,row[0]))
db.commit()
以防万一这是我使用 pyodbc 的连接字符串:
conn = pyodbc.connect("DRIVER={SQL Server};SERVER="+ Config_Main.dbServer +";DATABASE="+ Config_Main.encludeName +";UID="+ Config_Main.encludeUser +";PWD=" + Config_Main.encludePass)
db = conn.cursor()
另请注意,此查询在 SSMS 中运行良好。我也尝试过 openquery 方法,但没有运气。有什么想法吗?
【问题讨论】:
-
嗨,你见过Bobby Tables 吗?
-
@alfasin 这是一个没有输入的自动化过程。
-
哦,那样的话写马虎的代码也没关系……
-
尝试在调用
pyodbc.connect后立即添加conn.autocommit = True语句。 -
@GordThompson 成功了!那么.execute之后的commit语句不起作用,因为链接服务器想要在返回python之前提交更改?这听起来像一个准确的说法吗?
标签: python sql-server python-3.x pyodbc