2012-02-05 52 views
1

如果我們「需要訪問數據而不是web2py表屬性」,我們可以使用auto_import的文檔,但是這段代碼似乎使用了表格屬性。web2py auto_import vs define_table

from gluon import DAL, Field 

db = DAL('sqlite://storage.sqlite', auto_import=True) 
for row in db(db.person).select(): 
    print row.name 

該表在上次運行中定義。

db = DAL('sqlite://storage.sqlite', auto_import=True) 
db.define_table('person', 
       Field('name')) 
db.person[0] = {'name' : 'dave'} 
db.commit() 

這樣做既auto_import = True,並且define_table給出了關於 「無效的表名」 錯誤。如果我嘗試訪問db.table,則不會發生錯誤。

回答

2

使用auto_import=True,web2py將直接從應用程序的「databases」文件夾中的* .table文件中獲取字段名稱和類型。當文檔引用「web2py表格屬性」時將不可用,它指的是在模型中定義的屬性(即使用db.define_table()),但未存儲在數據庫或* .table文件中,如「requires」 ,「小部件」,「表示」等。這些屬性僅在web2py代碼中定義,因此不能僅通過讀取* .table文件來確定。請注意,* .table文件用於數據庫遷移,因此它們只存儲與數據庫直接相關的元數據(即字段名稱和類型,以及數據庫級別的限制條件,如「notnull」和「unique」)。像「requires」和「represent」這樣的屬性只用於web2py,並且對數據庫沒有影響,所以不會記錄在* .table文件中。