1

我正在做一个应用程序,它将使用多个 sqlite3 数据库,预填充来自外部应用程序的数据。每个数据库都将具有完全相同的表,但具有不同的数据。

我希望能够根据用户输入在这些数据库之间切换。在 TurboGears 2 中最优雅的方式是什么?

4

3 回答 3

1

我将两个数据库用于只读应用程序。第二个数据库是一个缓存,以防主数据库出现故障。我使用两个对象来保存连接、元数据和兼容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.

于 2009-09-14T17:13:56.230 回答
1

如果所有数据库都具有相同的架构,那么您应该能够使用相同的模型为不同的数据库创建多个会话。

于 2009-09-07T00:56:50.983 回答
1

杰利勒,

不久前我写了一篇关于在 TG2 中使用多个数据库的博文。您可以将此方法与 Jorge 对多个 DBSession 的建议结合起来,我认为您可以轻松做到这一点。

如何在 TurboGears 2.0 中使用多个数据库

希望这会有所帮助,赛斯

于 2009-09-10T06:13:53.840 回答