Как извлечь собственное соединение MYSQL * из соединения _mysql и / или MySQLdb? - PullRequest
0 голосов
/ 07 октября 2018

XTA (API транзакций XA, http://www.tiian.org/lixa/XTA.html)) - это новый API, разработанный в рамках проекта LIXA для поддержки двухфазных транзакций фиксации в контексте FaaS (функция как сервис) и микросервисных приложений полиглотов.

API уже поддерживает языки C и C ++, его целью является поддержка гораздо большего, по крайней мере Python, PHP и Java. В настоящее время я работаю над поддержкой Python с PostgreSQL и MySQL, thisПочтовый поток связан с Python / MySQL.

XTA реализован на языке C, а XTA для Python создан с использованием SWIG: я хотел бы повторить подход для всех языков, которые предоставляют драйверы, производные от MySQLC API

Теперь запрос о помощи : XTA необходимо подключить всех менеджеров ресурсов (здесь MySQL) для управления ими с помощью двухфазного принятия, в основном требуется указатель (MYSQL *), которыйдолжен быть передан конструктору MysqlXaResource http://www.tiian.org/lixa/manuals/xta/CPP/classxta_1_1MysqlXaResource.html для создания объекта XTA, связанного с уже открытымd Соединение с MySQL.

Вот основные шаги примера программы на 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 *» зарегистрирует обработчик соединенияОболочка ожидает указатель MYSQL *, сгенерированный SWIG (его можно изменить другим хорошо известным типом с помощью директивы typemap (https://github.com/tiian/lixa/blob/master/src/xta/python/xta.i)
  • _mysql.connect () и MySQLdb.connect() не предоставляют мне что-то эквивалентное MYSQL *, по крайней мере, мне так кажется.

Есть ли у вас какие-либо подсказки о получении чего-то вроде PyCapsule, инициализированного с собственным подключением MYSQL *?

Заранее спасибо за помощь.

С уважением,

Ch.F.

1 Ответ

0 голосов
/ 08 октября 2018

После некоторого прочтения документации я не нашел четкого решения.

Вот запрос на выборку, который я предложил группе разработчиков создать метод "get_native_connection ()": https://github.com/PyMySQL/mysqlclient-python/pull/269

...