Я запускаю Pylons, используя SQLAlchemy для подключения к MySQL, поэтому, когда я хочу использовать подключение к базе данных в контроллере, я могу сделать это:
from myapp.model.meta import Session
class SomeController(BaseController):
def index(self):
conn = Session.connection()
rows = conn.execute('SELECT whatever')
...
Скажем, моему контроллеру нужно вызвать внешнюю библиотеку, для которой также требуется соединение с базой данных, и я хочу предоставить для нее соединение из уже установленного соединения SQLAlchemy MySQL:
from myapp.model.meta import Session
import mymodule
class SomeController(BaseController):
def index(self):
conn = Session.connection()
myobject = mymodule.someobject(DATABASE_OBJECT)
...
conn.close()
Каким должен быть DATABSE_OBJECT? Возможности:
- Передайте
Session
-- а затем откройте и закройтеSession.connection()
в коде модуля - Передайте
conn
, а затем вызовитеconn.close()
в контроллере - Просто передайте параметры соединения, и код модуля настроит собственное соединение.
Есть еще одна проблема: мне нужно создавать экземпляры некоторых объектов в app_globals.py
, и этим объектам также требуется подключение к базе данных. Похоже, что app_globals.py
еще не может использовать соединение SQLAlchemy Session
-- оно еще не привязано.
Является ли моя архитектура принципиально несостоятельной? Не должен ли я таким образом обмениваться соединениями между Pylons и внешними библиотеками? Спасибо!