web2py auto_import vs define_table

1

В документации мы можем использовать 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.

Теги:
web2py

1 ответ

2
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню