我有来自web2py应用程序的sqlite数据库。
我想使用gluon
库来处理数据。
我看过this post,但收到错误DAL object has no attribute 'user
。
据我所知,我需要使用表的定义(在myapp/models/tables.py
中)。
如何将DAL与web2py之外的现有数据库一起使用(仅使用胶子库)。
这是我的代码:
from gluon.sql import DAL, Field
from gluon.validators import *
module_path = os.path.abspath(os.path.dirname(__file__))
print module_path
dbpath = module_path + '/../databases/'
db_name = "storage.sqlite"
db = DAL('sqlite://' + db_name, folder=dbpath)
rows = db(db.user).select()
我的问题是如何导入myapp/models/tables.py
中所有表格的定义?
答案 0 :(得分:2)
您可以使用pydal
pip install pydal
然后:
from pydal import DAL, Field
...
答案 1 :(得分:0)
您的代码是指db.user
,但您尚未在代码中定义“用户”表。您无法从应用程序模型文件导入表定义,因为它不是Python模块。一种解决方案可能如下:
db = DAL('sqlite://' + db_name, folder=dbpath, auto_import=True)
这将从* .table文件读取表元数据并创建表定义,但定义将不包括某些特定于web2py的模型属性,例如字段验证器,标签等。如果需要完整的DAL表具有所有字段属性的定义,您必须将它们直接包含在外部代码中。有关详细信息,请参阅here。
另外,做import gluon.dal
,而不是gluon.sql
,这是很久以前弃用的(它只是指gluon.dal)。
答案 2 :(得分:0)
您必须与从web2py环境收到的pydal / dal版本分开安装pydal。 (还要检查您的web2py副本中的pydal版本,并将相同版本安装到python中)
pip install pydal==some_version_number
注意:您必须使用指向数据库表所在文件夹的显式路径。
from pydal import DAL
db = DAL("some_db_uri", folder="/some/full_path_to/database", auto_import=True)