如何在python中为MSSQL执行两阶段事务&;不带ORM的DB2

如何在python中为MSSQL执行两阶段事务&;不带ORM的DB2,python,python-3.x,sqlalchemy,pyodbc,db2-400,Python,Python 3.x,Sqlalchemy,Pyodbc,Db2 400,我想使用sql alchemy在python中为mssql和DB2执行两阶段事务。对于mssql,我的连接字符串是 “mssql+pyodbc://**:*****@192.168.:1433/SourceDB?driver=FreeTDS&;odbc_options='TDS_Version=7.2'” 当我尝试开始两个阶段时,它会给出一个错误“notimplementederror” python中是否有支持分布式事务的mssql驱动程序 对于sqlalchemycore,它不受支持。 还

我想使用sql alchemy在python中为mssql和DB2执行两阶段事务。对于mssql,我的连接字符串是

“mssql+pyodbc://**:*****@192.168.:1433/SourceDB?driver=FreeTDS&;odbc_options='TDS_Version=7.2'”

当我尝试开始两个阶段时,它会给出一个错误“notimplementederror”

python中是否有支持分布式事务的mssql驱动程序

对于sqlalchemycore,它不受支持。


还有其他解决办法吗?请提供帮助。

ORM与分布式事务无关。这也不是驱动程序的工作——您需要一个事务协调器来连接数据库并协调事务。在Windows上,这是MS DTC。不过,您可以“作弊”,将一个数据库添加到另一个数据库作为链接服务器。例如,在SQL server上添加DB2作为链接服务器。当您执行与链接到SQL server的服务器一起工作的查询时,服务器将通过MS DTCBTW自动启动分布式事务,该问题已存在2年,可能无效。FreeTDS也是一个非常有限的驱动程序,它甚至不支持查询参数。SQL Server现在在Linux上运行。微软总是有自己的SQL Server ODBC Linux驱动程序版本,在Linux上的SQL Server发布之前,该驱动程序得到了极大的改进。SQL Server已经在2000年支持分布式事务和XA—我在COM+服务下使用它在Tuxedo后面的Unix上执行SQL Server和Oracle之间的分布式事务。如果有任何bug本质上说“SQL Alchemy不支持任何数据库的XA事务”。早在2000年代,MySQL甚至没有事务,当时所有主要数据库都建立并实现了XAstandard@PanagiotisKanavosre:“[支持分布式事务]也不是驱动程序的工作”-似乎表明,如果“OLE DB提供程序…不支持所需的事务接口”,则带有DB2链接服务器的SQL Server实例可能无法支持分布式事务。看起来DB2驱动程序(在本例中是“提供者”)确实需要支持分布式事务。还是我遗漏了什么?@GordThompson不,没有
还要注意,此查询在SSMS中运行良好。
。SSMS只是客户端工具。它不执行任何魔术,它只是将命令发送到服务器执行。事实上,您似乎发现问题与驱动程序无关,而是与自动提交设置有关
conn.begin_twophase()  #conn is an connection object