ОК, думаю, я понял это.Решение состоит в том, чтобы объявить объекты модели вне model/__init__.py
.Я пришел к выводу, что __init__.py
импортируется как первый файл при импорте чего-либо из модуля (в данном случае model
), и это вызывает проблемы, поскольку объекты модели объявляются до вызова init_model()
.
КомуЧтобы избежать этого, я создал новый файл в модуле model
, например, objects.py
.Затем я объявил все свои объекты модели (например, Event
) в этом файле.
Затем я могу импортировать свои модели следующим образом:
from PRJ.model.objects import Event
Кроме того, чтобы избежать указания autoload-with
для каждой таблицы я добавил эту строку в конце init_model()
:
Base.metadata.bind = engine
Таким образом, я могу объявить свои объекты модели без шаблонного кода, например:
class Event(Base):
__tablename__ = 'events'
__table_args__ = {'schema': 'events', 'autoload': True}
event_identifiers = relationship(EventIdentifier)
def __repr__(self):
return "<Event(%s)>" % self.id