我正在做一个应用程序,它将使用多个 sqlite3 数据库,预填充来自外部应用程序的数据。每个数据库都将具有完全相同的表,但具有不同的数据。
我希望能够根据用户输入在这些数据库之间切换。在 TurboGears 2 中最优雅的方式是什么?
我正在做一个应用程序,它将使用多个 sqlite3 数据库,预填充来自外部应用程序的数据。每个数据库都将具有完全相同的表,但具有不同的数据。
我希望能够根据用户输入在这些数据库之间切换。在 TurboGears 2 中最优雅的方式是什么?
我将两个数据库用于只读应用程序。第二个数据库是一个缓存,以防主数据库出现故障。我使用两个对象来保存连接、元数据和兼容Table实例。视图函数的顶部分配db = primaryor 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 的建议结合起来,我认为您可以轻松做到这一点。
希望这会有所帮助,赛斯