相关疑难解决方法(0)

每个视图更改数据库并访问每个视图的多个数据库

我在Pyramid中使用SQLAlchemy时遇到了一些问题.虽然我可以找到我需要的例子,但它们通常很短而且缺乏.所以我最终得到的补丁代码几乎没有任何意义.所以我希望有人可以更充分地说明我需要做些什么.

我有4个数据库都具有相同的架构.我希望能够从一个金字塔应用程序处理它们,有时列出来自所有4个数据库的所有"订单",有时只列出"site1"中的所有"订单".由于模式相同,我还为数据库使用相同的模型类.

我已经尝试了sqlahelper和普通的SQLAlchemy而没有运气.下面的代码使用sqlahelper,但我很乐意使用任何有效的方法:

__init__.py

site1_eng = engine_from_config(settings, prefix='site1.')
site2_eng = engine_from_config(settings, prefix='site2.')
site3_eng = engine_from_config(settings, prefix='site3.')

sqlahelper.add_engine(site1_eng, 'site1_eng')
sqlahelper.add_engine(site2_eng, 'site2_eng')
Run Code Online (Sandbox Code Playgroud)

views.py

def site_orders(request):
    site = request.matchdict['site']
    db_eng = sqlahelper.get_engine(("%s_eng" % (site)))
    conn = db_eng.connect()
    dbsession = sqlahelper.get_session()
    dbsession.configure(bind=conn)

    orders = dbsession.query(Order).order_by(Order.cdate.desc())[:100]

    return dict(orders=orders, pagetitle=(site+" Orders"))
Run Code Online (Sandbox Code Playgroud)

怎么了?

好吧,我希望它会根据URL切换数据库,它确实!但是,选择哪个似乎是完全随机的.所以/ orders/site1 /有时会转到site2数据库,有时会转到site3.刷新通常会每次都切换它选择的数据库.其他网址也是如此.

它几乎就好像会话没有绑定到数据库并且它的选择当时在会话中发生了什么?这可能没有意义 - 我对SQLAlchemy的理解并不是很好.

真的希望有人可以提供帮助,因为这一切都取决于能否在视图中快速轻松地切换数据库,而且目前似乎完全无法控制它.

注意:我最初尝试关注和更改Pyramid SQLA + URL Dispatcher教程,该教程使用:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Run Code Online (Sandbox Code Playgroud)

但是在找到sqlahelper时我删除了它.如果我应该使用它让我知道.

python pylons sqlalchemy pyramid

4
推荐指数
1
解决办法
1657
查看次数

标签 统计

pylons ×1

pyramid ×1

python ×1

sqlalchemy ×1