Python分布式事务,如Java Transaction API(JTA)



是否有关于Python或类似MySQLdb的Java Transaction API(JTA)中的分布式事务的解决方案?

当我处理多个数据库(可能是不同类型的数据库)上的数据时,我遇到了一个问题。

如何确保数据一致性?

我知道Java中有Java事务API(JTA)。

Python我该怎么做?

您可以使用SQL语句来执行XA事务。这不像一个真正的API那么漂亮,但它是有效的。我不知道Python是否有TM(事务管理器),但您可以自己编写。

还要注意,在Java中,使用XA时不需要使用应用程序服务器。例如:http://bugs.mysql.com/file.php?id=22190&bug_id=75316

In [1]: import mysql.connector
In [2]: c = mysql.connector.connect(host='127.0.0.1',port=5705,user='msandbox',password='msandbox');
In [3]: cur = c.cursor();
In [4]: cur.execute("XA START 'py-xa-001'");
In [5]: cur.execute("INSERT INTO test.t1 VALUES(1)");
In [6]: cur.execute("XA RECOVER");
In [7]: print(cur.fetchone());
None
In [8]: cur.execute("XA END 'py-xa-001'");
In [9]: cur.execute("XA PREPARE 'py-xa-001'");
In [10]: cur.execute("XA RECOVER");
In [11]: print(cur.fetchone());
(1, 9, 0, u'py-xa-001')
In [12]: cur.execute("XA ROLLBACK 'py-xa-001'");
In [13]: cur.close()
Out[13]: True
In [14]: c.disconnect()

我自己还没有使用过这个选项,但粗略地看,Transaction库似乎符合Java的事务API所提供的描述。它可以在pypi中下载,并在阅读文档

中进行记录

最新更新