В документации мы можем использовать auto_import, если мы "нуждаемся в доступе к данным, но не к его атрибутам таблицы web2py", но этот код, по-видимому, отлично использует атрибуты таблицы.
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.
С auto_import=True
, web2py получит имена полей и типы непосредственно из *.table файлов в папке "базы данных" приложения. Когда документация ссылается на "атрибуты таблицы Web2py", которые не будут доступны, это относится к атрибутам, которые определены в модели (т. db.define_table()
использованием db.define_table()
), но не хранится в базе данных или *.table файлах, таких как как "требуется", "виджет", "представлять" и т.д. Эти атрибуты определяются только в коде web2py и поэтому не могут быть определены просто путем чтения *.table файлов. Обратите внимание: файлы *.table используются для миграции баз данных, поэтому они хранят только метаданные, непосредственно относящиеся к базе данных (т.е. Имена полей и типы, а также ограничения на уровне базы данных, такие как "notnull" и "unique"). Атрибуты, такие как "требует" и "представлять", используются только web2py и не влияют на базу данных, поэтому не записываются в *.table файлы.