请确保它引用同一个数据库文件夹,其中 *.table 可用,如果在 py4web 或终端上运行 pydal,请确保执行 db.commit() 如果不是,它只是存储在内存中而不是写入数据库
例如
在 jupyter 笔记本中(创建了两个笔记本,1 个用于 define_table,auto_import=False,另一个没有 define_table,auto_import=True)
笔记本1
from pydal import DAL, Field
from datetime import datetime
now = datetime.now()
db = DAL('sqlite://jupyter_pydal.sqlite', folder = 'databases', auto_import = False)
db.define_table('test',
Field('string_0'),
Field('text_0', 'text'),
Field('integer_0', 'integer'),
Field('double_0', 'double'),
Field('date_0', 'date'),
Field('datetime_0', 'datetime'),
#format = lambda r: f'{r.name}' )
format = lambda r: '%s' % (r.name) )
if db(db.test).isempty():
p0 = db.test.insert(string_0 = 'string_0', text_0 = 'text_0', integer_0 = 0, double_0 = 0, date_0 = now, datetime_0 = now)
p1 = db.test.insert(string_0 = 'string_1', text_0 = 'text_1', integer_0 = 1, double_0 = 1, date_0 = now, datetime_0 = now)
db.commit()
db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)
笔记本2
from pydal import DAL, Field
db = DAL('sqlite://jupyter_pydal.sqlite', folder = 'databases', auto_import = True)
db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)
命令的结果
db._uri
db._dbname
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)
在 notebook2 上与 notebook1 相同
但是当删除数据库文件夹上的 *.table 并重新运行 notebook2 时,结果为
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)
在 notebook2 上找不到
web2py 网站上 pydal 的参考
http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Using-DAL-without-define-tables