我正在做一个应用程序,它将使用多个 sqlite3 数据库,预填充来自外部应用程序的数据。每个数据库都将具有完全相同的表,但具有不同的数据。
我希望能够根据用户输入在这些数据库之间切换。在 TurboGears 2 中最优雅的方式是什么?
我正在做一个应用程序,它将使用多个 sqlite3 数据库,预填充来自外部应用程序的数据。每个数据库都将具有完全相同的表,但具有不同的数据。
我希望能够根据用户输入在这些数据库之间切换。在 TurboGears 2 中最优雅的方式是什么?
我将两个数据库用于只读应用程序。第二个数据库是一个缓存,以防主数据库出现故障。我使用两个对象来保存连接、元数据和兼容Table
实例。视图函数的顶部分配db = primary
or db = secondary
,其余的只是针对 的查询db.tableA.join(db.tableB)
。我没有使用 ORM。
模式并不严格相同。主数据库需要schema.
前缀 ( Table(...schema='schema')
),而缓存数据库不需要。为了解决这个问题,我在一个将模式名称作为参数的函数中创建了我的表对象。通过为每个数据库调用一次该函数,我最终得到了兼容的前缀和非前缀Table
对象。
至少在 Pylons 中,SQLAlchemymeta.Session
是一个ScopedSession
. 应用程序BaseController
在每次请求后appname/lib/base.py
调用。Session.remove()
最好有一个Session
与两个数据库通信的单一数据库,但如果你不这样做,你可能需要修改你BaseController
的调用.remove()
每个Session
.
如果所有数据库都具有相同的架构,那么您应该能够使用相同的模型为不同的数据库创建多个会话。
杰利勒,
不久前我写了一篇关于在 TG2 中使用多个数据库的博文。您可以将此方法与 Jorge 对多个 DBSession 的建议结合起来,我认为您可以轻松做到这一点。
希望这会有所帮助,赛斯