Добрый день!
Ответ
angru является правильным, я просто дам несколько дополнительных уточнений.
Как правильно сказано,
generate_mapping()
нужно вызывать один раз после того, как все сущности определены. После этого схема фиксируется и добавлять новые сущности в нее уже нельзя.
Когда объявляется класс сущности, то он становится доступен как атрибут объекта базы данных. То есть, если сущность опредена как:
db = Database()
class Person(db.Entity):
name = Required(str)
то после этого можно ссылаться на нее так:
db.Person
. Например, в запросах:
select(p for p in db.Person if p.name.startswith('A'))
Поэтому импортировать модели в main.py необязательно - они уже доступны там как атрибуты объекта
db
.
Часть наиболее важных сущностей можно при желании определить в том же самом файле, где объявляется объект
db
.
Иногда может быть удобнее не объявлять параметры объекта
Database
сразу при его создании, а выполнять метод
db.bind(...)
непосредственно перед выполнением метода
db.generate_mapping(...)
- тогда одни и те же сущности могут использованы с разными типами баз данных (например, SQLite и MySQL).