SQLAlchemy: передача параметра в объект - PullRequest
0 голосов
/ 15 января 2011

Я использую 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 из базы данных.Но Фу нужен объект Bar для работы.Но как мне получить ссылку на Bar в Foo?

Обычно я просто передаю Bar в конструктор Foo.Однако это не сработает, потому что SQLAlchemy создает объект.

Что я хочу сделать, так это каким-то образом настроить сеанс с объектом Bar таким образом, чтобы этот объект bar вводился в объекты Foo при их добавлении в сеанс.

Что я попробовал

В SQLAlchemy есть система событий.Одним из событий сеанса является on_attach.Это вызывается всякий раз, когда объект добавляется в сеанс.Однако он не вызывается, когда объект загружается из базы данных.

Существуют события, которые вызываются при загрузке из базы данных, но они относятся к отдельным картографам.Объект Bar должен быть связан с отдельным сеансом.

1 Ответ

0 голосов
/ 15 января 2011

Если вам нужен только один Bar для всех Foo с, вы можете использовать свойство или метод класса в Foo.Поскольку вы не пошли по этому очевидному пути, вам, похоже, нужно создать новый Bar для каждого нового Foo.Вероятно, Инструментарий имеет необходимые события.Пример кэширования должен иметь способ перехватывать события загрузки.

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