【问题标题】:Web2py DAL has no attribute?Web2py DAL 没有属性?
【发布时间】:2013-10-03 16:47:17
【问题描述】:

我的 web2py 应用程序今天返回了一个错误,这很奇怪。

Traceback (most recent call last):
  File "/var/www/web2py/gluon/restricted.py", line 212, in restricted
    exec ccode in environment
  File "/var/www/web2py/applications/1MedCloud/controllers/default.py", line 475, in <module>
  File "/var/www/web2py/gluon/globals.py", line 194, in <lambda>
    self._caller = lambda f: f()
  File "/var/www/web2py/applications/1MedCloud/controllers/default.py", line 63, in patient_register
    rows = db(db.patientaccount.email==email).select()
  File "/var/www/web2py/gluon/dal.py", line 7837, in __getattr__
    return ogetattr(self, key)
AttributeError: 'DAL' object has no attribute 'patientaccount'

我使用 Mysql 作为数据库,并且表 'patientaccount' 确实存在。没有连接问题,因为我可以创建表但不能从服务器获取它们。

我一直在使用相同的代码来做 db 的事情,这是我的代码

db = DAL('mysql://###:$$$@^^^^^^:3306/account_info', pool_size=0)
    rows = db(db.patientaccount.email==email).select()

我没有更改我的 default.py 文件中的任何代码,但不小心删除了我的应用程序中“数据库”文件夹中的一些文件。但我怀疑这是否会导致错误,因为模块是在服务器上获取表而不是使用本地文件。

请帮忙!提前致谢!

【问题讨论】:

    标签: python mysql amazon-ec2 web2py


    【解决方案1】:

    DAL 不会检查 MySQL 数据库以发现其表和字段。您必须明确定义数据模型。所以,在你的代码的某个地方,你必须这样做:

    db.define_table('patientaccount',
        Field('email'),
        ...)
    

    这将定义 db.patientaccount 表,以便 DAL 知道它的存在以及它包含哪些字段。

    【讨论】:

    • 谢谢!正好解决问题!老实说,我在文档中没有看到任何关于此的内容。还想知道未来的构建是否会包含自动获取功能。
    • 我想这本书可能会更明确一点,但是在整本书中,每个涉及 DAL 的示例都包括表定义,即使在使用遗留数据库时也是如此。请注意,有用于检查 MySQLPostgreSQLSQLite 数据库和自动生成 DAL 模型的脚本。
    • 本书没有现实生活中的例子。没有示例如何将 pyDAL 与现有表一起使用。真可惜。
    • @Marek Marczak,不确定您的意思。 legacy databases 部分显示了旧表的示例表定义。如果现有表具有自动递增的 ID 字段,则使用新表与使用现有表没有区别。您到底在寻找什么?
    猜你喜欢
    • 2011-01-09
    • 2015-08-27
    • 2014-09-02
    • 2013-07-17
    • 2017-04-08
    • 2015-07-19
    • 2012-02-22
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多