如何从_mysql和/或MySQLdb连接中检索MYSQL *本机连接?

时间:2018-10-07 09:48:17

标签: python swig mysql-python

XTA(XA交易API,http://www.tiian.org/lixa/XTA.html)是一种新的API,已在LIXA项目内部开发,以在FaaS(功能即服务)和面向微服务的多语言应用程序的上下文中支持两阶段提交交易

该API已经支持C和C ++语言;它旨在以最少的Python,PHP和Java支持更多的功能。 我目前正在使用PostgreSQL和MySQL支持Python,此邮件线程与Python / MySQL有关。

XTA是用C语言实现的,而Python的XTA是使用SWIG生成的:我想对所有提供从MySQL C API派生的驱动程序的语言重复该方法

现在请求帮助:XTA需要征集所有资源管理器(此处为MySQL)以使用两阶段提交来管理它们,基本上,它需要一个必须传递给的指针(MYSQL *) MysqlXaResource构造函数http://www.tiian.org/lixa/manuals/xta/CPP/classxta_1_1MysqlXaResource.html,用于创建与已打开的MySQL连接关联的XTA对象。

以下是Python示例程序(https://github.com/tiian/lixa/blob/master/doc/examples/xta/python/example_xta_sa21.py)的基本步骤:

# initialize XTA environment
Xta_Init()

# create a new MySQL connection
# Note: using _mysql or MySQLdb functions
rm2 = MySQLdb.connect("localhost", "lixa", "", "lixa")
# alternatively, usign _mysql 
rm2 = _mysql.connect("localhost", "lixa", "", "lixa")

# create a new XTA Transaction Manager object
tm = TransactionManager()

# create an XA resource for MySQL
#
# how to retrieve MYSQL * from rm2 ?
xar2 = MysqlXaResource(rm2.???, "PostgreSQL", "dbname=testdb")

看最后一条语句,堆栈是:

  • XTA本机C库期望“ MYSQL *”注册连接处理程序
  • XTA C ++包装器期望“ MYSQL *”作为构造对象的第一个参数
  • XTA Python(由SWIG生成)包装器期望一个“ SWIG生成” MYSQL *指针(可以通过“ typemap”指令(https://github.com/tiian/lixa/blob/master/src/xta/python/xta.i来用另一个众所周知的类型进行更改)
  • _mysql.connect()和MySQLdb.connect()不能为我提供相当于MYSQL *的功能,至少在我看来是如此。

您是否有任何关于检索使用MYSQL *本机连接初始化的PyCapsule之类的提示?

预先感谢您的帮助。

此致

Ch.F。

1 个答案:

答案 0 :(得分:0)

在阅读了一些文档之后,我发现没有明确的解决方案。

这是我提出的要求,开发团队建议创建一个“ get_native_connection()”方法:https://github.com/PyMySQL/mysqlclient-python/pull/269