如何使用web2py外部的define_tables

时间:2015-08-08 15:40:49

标签: web2py

对于维护工作,我想在web2py之外调用define_tables。可以这样做吗?我可以这样做:

from gluon.tools import Auth
from pydal import DAL

db = DAL(...)
auth = Auth(db)
auth.define_tables()

我想不是,因为Auth也需要访问注册控制器......是否有替代方法?

1 个答案:

答案 0 :(得分:1)

您将遇到的问题不是缺少Auth操作的控制器,而Auth初始化需要requestsession个对象(附加到current对象),你必须模拟(这是可行的,但其他解决方案可能更简单)。

如果您必须完全在web2py应用程序的上下文之外运行代码,则可能会使用DAL auto import功能:

db = DAL(...,folder='path/to/app/databases', auto_import=True)

以上内容将根据存储在迁移文件中的元数据自动定义所有数据库表模型。但是,表定义将缺少许多特定于web2py的属性,例如字段验证器,标签等(元数据文件仅包括管理数据库迁移所需的信息,例如字段名称和类型,约束等)。 。根据您需要对Auth表执行的操作,这可能就足够了。

或者,您可以考虑在相关web2py应用程序的上下文中运行Python代码。有几种方法可以实现这一目标。

首先,您可以使用web2py command line选项来运行Python脚本:

>> python web2py.py -S myapp -M -R /path/to/script.py

以上将生成web2py环境,运行应用程序的模型,然后在该环境中执行脚本(所以authdbAuth表定义都将是可用于脚本)。

其次,您可以将代码放在应用程序中的控制器或模块中,然后调用控制器中的特定操作以触发代码运行。您可以通过浏览器界面或使用curl或其他Python脚本通过编程调用来运行操作。

最后,您可以使用web2py scheduler在应用程序的上下文中运行一次性或定期任务(大多数代码可以放在导入的模块中)。

注意,对于需要访问web2py应用程序环境的模块中的代码,请参阅有关使用current object的文档。

相关问题