是否有关于 Python 中的分布式事务或 Java Transaction API (JTA) 等 MySQLdb 的解决方案?
我在处理多个数据库(可能是不同类型的数据库)上的数据时遇到了问题。
如何确保数据一致性?
我知道 Java 中有 Java Transaction API (JTA)。
我该怎么做Python?
是否有关于 Python 中的分布式事务或 Java Transaction API (JTA) 等 MySQLdb 的解决方案?
我在处理多个数据库(可能是不同类型的数据库)上的数据时遇到了问题。
如何确保数据一致性?
我知道 Java 中有 Java Transaction 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()