пожалуйста, убедитесь, что он относится к той же папке базы данных, где *.table доступна там, если запустите pydal на py4web или терминале, убедитесь, что вы выполняете 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)
на ноутбуке2 такой же, как и на ноутбуке1
но когда удалите *.table в папке базы данных и перезапустите ноутбук2, результат для
db.tables
db.test.fields
db.test.string_0.type
rows = db(db.test).select()
print(rows)
не найден на ноутбуке2
ссылка на pydal на сайте web2py
http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Using-DAL-without-define-tables
person
steve van christie
schedule
20.01.2021