Как использовать несколько сессий в приложении пилонов? - PullRequest
2 голосов
/ 03 августа 2010

Я прочитал "Несколько соединений с базой данных с помощью Python + Pylons + SQLAlchemy" , и я понял, как создать несколько движков, используя эту технику, но теперь я ищу совет о том, как обрабатывать созданиеSession с для этих двигателей.Прямо сейчас, Session в моем проекте определяется в соответствии с соглашением Pylons: myapp.model.meta.Session = scoped_session(sessionmaker()) и импортируется как myapp.model.Session.Это хорошо работает, если есть только один двигатель.

Какой хороший, поддерживаемый подход для определения этого для нескольких двигателей?Набор двигателей может меняться во время выполнения, что бы это ни стоило, поэтому мне понадобится возможность создавать новые Session на лету, без жесткого кодирования их в модель.

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Если вы хотите выбрать серверную часть базы данных для одного запроса, хороший вариант - сначала позвонить meta.Session(bind=get_engine_for_this_request()). Это создаст сеанс с указанными параметрами. Вы можете вставить это в BaseController, если это имеет смысл в вашем случае.

Для нескольких бэкэндов на один запрос лучший подход зависит от вашего конкретного варианта использования. Если все бэкэнды имеют одинаковую схему, вероятно, лучше всего создать несколько ScopedSessions, по одному для каждого бэкенда. Когда они содержат разные схемы, вы можете создать несколько объектов MetaData (или базовых классов в случае декларативного) и связать их с механизмами.

0 голосов
/ 04 августа 2010

Используйте параметр bind для sessionmaker, чтобы привязать сеанс к определенному соединению.

См. http://www.sqlalchemy.org/docs/05/reference/orm/sessions.html#sqlalchemy.orm.sessionmaker для получения дополнительной информации.

...