2013-09-27 73 views
0

今天我的web2py應用程序返回了一個錯誤,這很奇怪。Web2py DAL沒有屬性?

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 = DAL('mysql://###:[email protected]^^^^^^:3306/account_info', pool_size=0) 
    rows = db(db.patientaccount.email==email).select() 

我沒有在我的default.py文件更改任何代碼,但不小心刪除了裏面的「數據庫的一些文件「文件夾在我的應用程序。但我懷疑這是否會導致錯誤,因爲模塊正在服務器上取表而不是使用本地文件。

請幫忙!提前致謝!

回答

1

DAL不檢查MySQL數據庫以發現其表和字段。您必須明確定義數據模型。所以,在你的代碼的某個地方,你必須做到:

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

所以DAL知道它的存在,什麼字段,它包括將定義db.patientaccount表。

+0

謝謝!這正好解決了這個問題!老實說,在文檔中我沒有看到任何與此有關的內容。還想知道未來的構建是否會包含自動獲取功能。 – user2363192

+0

我想這本書可能會更明確一點,但在本書中,涉及DAL的每個示例都包含表定義,即使在使用舊數據庫時也是如此。請注意,有用於檢查[MySQL]的腳本(https://github.com/web2py/web2py/blob/master/scripts/extract_mysql_models.py),[PostgreSQL](https://github.com/web2py/web2py/) blob/master/scripts/extract_pgsql_models.py)和[SQLite](https://github.com/web2py/web2py/blob/master/scripts/extract_sqlite_models.py)數據庫並自動生成DAL模型。 – Anthony