gpt4 book ai didi

python - "transaction interface"更新链接服务器上的表时出错

转载 作者:行者123 更新时间:2023-11-30 22:26:14 25 4
gpt4 key购买 nike

当我尝试更新作为 SQL Server 数据库上的链接服务器的 db2 数据库时,出现此错误。

ERROR:root:('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]The requested operation could not be performed because OLE DB provider "IBMDA400" for linked server "iSeries" does not support the required transaction interface. (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 方法,但没有成功。有什么想法吗?

最佳答案

Python 的 DB API 2.0指定默认情况下,连接应在自动提交“关闭”的情况下打开。这会导致所有数据库操作都在必须在 Python 代码中显式提交(或回滚)的事务中执行。

当使用 autocommit = False(默认)的 pyodbc 连接向 SQL Server 发送 UPDATE 时,该 UPDATE 会包含在由 SQL Server 管理的本地事务中。当 SQL Server 确定目标表位于链接服务器上时,它会尝试将事务提升为由 MSDTC 管理的分布式事务。 。如果用于管理链接服务器的连接技术不支持分布式事务,则操作将失败。

通常可以通过确保 pyodbc 连接启用自动提交来避免此问题,方法是:

cnxn = pyodbc.connect(conn_str, autocommit=True)

cnxn = pyodbc.connect(conn_str)
cnxn.autocommit = True

这将单独发送每个 SQL 语句,而不包含在隐式事务中。

关于python - "transaction interface"更新链接服务器上的表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47288391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com