我已经阅读"Multiple database connections with Python + Pylons + SQLAlchemy"了解了如何使用该技术创建多个引擎,但现在我正在寻找有关如何为这些引擎创建Session
s的建议。现在,我的项目中的Session
按照Pylons惯例定义:myapp.model.meta.Session = scoped_session(sessionmaker())
并导入为myapp.model.Session
。如果只有一个引擎,这样可以正常工作。
为多个引擎定义这个有什么好的,可维护的方法?这组引擎可能会在运行时更改它的价值,因此我需要能够动态创建新的Session
,而无需将其硬编码到模型中。
答案 0 :(得分:1)
如果要为每个请求选择数据库后端,一个好的选择是首先调用meta.Session(bind=get_engine_for_this_request())
。这将创建具有指定参数的会话。如果在你的情况下有意义,你可以将它粘贴到BaseController中。
对于每个请求的多个后端,最佳方法取决于您的特定用例。如果所有后端都具有相同的模式,则最好创建多个ScopedSessions,每个后端一个。当它们拥有不同的模式时,您可以创建多个MetaData对象(或者在声明的情况下为基类)并将它们绑定到引擎。
答案 1 :(得分:0)
使用bind
参数sessionmaker
将会话绑定到特定连接。
有关详细信息,请参阅http://www.sqlalchemy.org/docs/05/reference/orm/sessions.html#sqlalchemy.orm.sessionmaker。