Событие экземпляра SQLAlchemy после загрузки коллекций? - PullRequest
0 голосов
/ 16 мая 2019

Я создаю веб-приложение с помощью SQLAlchemy и Flask.У меня есть отношение один-ко-многим между двумя сопоставленными объектами.На родительском объекте я хотел бы иметь словарь дочерних объектов (а также свойство коллекции) - это облегчит взаимодействие с другими модулями Python, которые я использую.

Iпопытался использовать украшение @reconstructor для вызова метода всякий раз, когда загружается родительский объект, в котором я использовал бы словарное понимание для создания нового свойства.Это не удалось, поскольку во время вызова метода коллекция не была заполнена полностью - она ​​содержит только первый элемент, поскольку обработана только одна строка возвращаемых данных.

class Child(Base):
    __tablename__ = 'child'
    uid = Column(Integer, primary_key=True)
    name = Column(String(256))
    parent_uid = Column(Integer, ForeignKey('parent.uid'))
    parent = relationship('Parent', back_populates='children')

class Parent(Base):
    __tablename__ = 'parent'
    uid = Column(Integer, primary_key=True)
    children = relationship('Child', lazy='joined')

    @reconstructor
    def init_on_load(self):
        self.children_dict = {c.uid : c.name for c in self.children}

MyОбходной путь - просто вызвать init_on_load вручную сразу после загрузки объекта, но это очень не элегантно.Есть ли какое-либо событие, которое я могу связать, чтобы достичь этого?Я бы хотел, чтобы он назывался как можно позже, т.е.непосредственно перед session.query(Parent).filter(Parent.uid == parent_uid).first() возвращает значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...