Я использую SQLAlchemy в своем проекте.SQLAlchemy: Передача параметра объекту
У меня есть два класса, называть их Bar и Foo
class Bar(object):
def valueize(self, name):
# do some crazy magic
return value
class Foo(Base):
id = Column(...
name = Column(...
@property
def value(self):
return self._bar.valueize(self.name)
Foo строится либо мною построение объекта непосредственно или с помощью SQLAlchemy, когда он загружает объекты Foo из базы данных. Но для работы Foo нужен объект Bar. Но как мне получить ссылку на Bar в Foo?
Обычно я просто передаю панель в конструктор Foo. Однако это не будет работать, потому что SQLAlchemy создает объект.
Что я хочу сделать, так или иначе сконфигурировать сеанс с объектом Bar, чтобы этот объект штриха вводился в объекты Foo, когда они добавляются в сеанс.
Что я Пробовал
SQLAlchemy имеет систему событий. Одним из событий сеанса является on_attach. Это вызывается всякий раз, когда объект добавляется в сеанс. Однако он не вызывается, когда объект загружается из базы данных.
Есть события, которые вызывается при загрузке из базы данных, но они основаны на каждом модуле. Объект Bar должен быть связан с отдельным сеансом.
Мне нужен один столбец на sqlalchemy Session. Я могу поймать загрузку с помощью инструментального события, но я не могу прикрепить его к сеансу. –
Как только вы посмотрите на объект Session, вы можете недорого проверить, есть ли у него связанный бар. Если это не так, вы можете связать бары прямо на месте. Если вы получаете сеанс неявно, вы можете изменить свой код, чтобы сначала получить сеанс, и проверить/исправить его. Что случилось с этой картиной? – 9000
Проблема в том, что я должен перепрыгнуть через несколько обручей, чтобы эта стратегия работала. Я должен как-то «ассоциировать» сеансы и бары. Я должен использовать какое-то оборудование для обнаружения, когда строится новый объект. Все это кажется большим количеством кода, просто желающего передать дополнительные параметры объекту. Я надеялся, что кто-то может указать на более чистый способ сделать это. –