澄清共享单个数据库的web2py应用程序

时间:2012-11-26 07:28:16

标签: sqlite web2py shared

对不起,我对web2py manual explanation有点不清楚。

作为示例,给定app1和app2

我想让app2共享我在app1中构建的数据库

所以我将app2 / models / db.py文件改为show:db = DAL('sqlite://storage.sqlite',migrate='false')?

并在app2 / models目录中包含所有其他myModel.py文件?

如果数据库在app1 / databases /中,app2如何知道如何找到正确的数据库文件?

This Thread开始回答这个问题,但我仍不清楚如何定义共享数据库所在的位置。

2 个答案:

答案 0 :(得分:1)

我现在无法测试,但答案应该是:

  • 您可以覆盖DAL中的文件夹:

    因此两个应用都应该指向同一个文件。

    (请参阅docs和此thread)。

db = DAL('sqlite://storage.sqlite',folder='path/to/app/databases')
  • 是的,应该也需要两个应用程序中的模型文件,否则应用程序将不知道如何访问数据库。

答案 1 :(得分:1)

注意,DAL(..., migrate=False)只为每个表设置migrate的默认值 - 它对define_table()调用包含其自己的显式{的表的迁移状态没有任何影响{1}}论点。如果要完全禁用整个数据库连接的迁移(无论单个migrate调用),请使用:

define_table()

此外,要在应用程序之间共享模型定义,而不是简单地复制模型文件,您可以将定义放在模块中的函数或类中,然后导入模块。另一种选择是使用auto_import

DAL(..., migrate_enabled=False)

请注意,DAL(..., auto_import=True) 将导入字段名称和类型,但它不会包含特定于DAL的属性,例如验证程序和默认值,因此其用法有限。