【问题标题】:Clarification on web2py apps sharing a single database关于共享单个数据库的 web2py 应用程序的说明
【发布时间】:2012-11-26 07:28:16
【问题描述】:

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

举个例子,给定app1和app2

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

那么我是否要更改 app2/models/db.py 文件以显示:db = DAL('sqlite://storage.sqlite',migrate='false') ?

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

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

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

【问题讨论】:

    标签: sqlite web2py shared


    【解决方案1】:

    注意,DAL(..., migrate=False) 只是为每个表设置migrate 的默认值——它不会对define_table() 调用包含它们自己的显式migrate 参数的表的迁移状态产生任何影响。如果您想完全禁用整个数据库连接的迁移(不管单个 define_table() 调用),请改用:

    DAL(..., migrate_enabled=False)
    

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

    DAL(..., auto_import=True)
    

    注意,auto_import 将导入字段名称和类型,但不会包含 DAL 特定的属性,例如验证器和默认值,因此它的使用受到一定限制。

    【讨论】:

      【解决方案2】:

      我现在无法对此进行测试,但答案应该是:

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

        所以两个应用程序应该指向同一个文件。

        (请参阅docs 和此thread)。

      .

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-21
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多