Как написать гибридное свойство с оператором case? - PullRequest
0 голосов
/ 19 сентября 2019

Я новичок в SQL Алхимии.Я пытаюсь определить гибридное свойство на основе отношения:

class Lead(Base):

    __tablename__ = 'lead'

    id = Column(Integer, primary_key=True)
    assistant_id = Column(Integer, ForeignKey('assistant.id'))
    legacy_assistant_id = Column(Integer, ForeignKey('legacy_assistant.id'))

    assistant = relationship('Assistant')

    legacy_assistant = relationship('LegacyAssistant')

    @hybrid_property
    def assistant_name(self):

        if not self.assistant_id and not self.legacy_assistant_id:
            return 'Unassigned'
        elif not self.assistant_id and self.legacy_assistant_id:
            return self.legacy_assistant.name
        else:
            return self.assistant.name

    @assistant_name.expression
    def assistant_name(cls):
        return (
            select(
                case(
                    [
                        (cls.assistant_id == None, Assistant.name),
                        (and_(cls.assistant_id == None, cls.legacy_assistant_id == None), 'Unassigned'),
                        (and_(cls.assistant_id == None, cls.legacy_assistant_id != None), LegacyAssistant.name),
                    ]
                )
            )
        )

Когда я выполняю запрос для получения атрибута assistant_name, я получаю ошибку, так или иначе.Вот некоторые из них:

  1. AttributeError while querying: Neither 'InstrumentedAttribute' object nor 'Comparator' has an attribute -> Когда у меня есть только hybrid_property и нет expression
  2. columns argument to select() must be a Python list or other iterable -> Когда используются как гибрид, так и экспрессия,
  3. И так далее ...

Как определить мое свойство assistant_name, которое получает свое значение на основе значений из двух отношений (assistant и legacy_assistant)?Спасибо!

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