0

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

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

如何确保数据一致性?

我知道 Java 中有 Java Transaction API (JTA)。

我该怎么做Python?

4

2 回答 2

0

您可以使用 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()
于 2014-12-27T13:24:13.153 回答
0

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

于 2016-09-14T23:31:44.587 回答