Я новичок в 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
, я получаю ошибку, так или иначе.Вот некоторые из них:
AttributeError while querying: Neither 'InstrumentedAttribute'
object nor 'Comparator' has an attribute
-> Когда у меня есть только hybrid_property
и нет expression
columns argument to select()
must be a Python list or other iterable
-> Когда используются как гибрид, так и экспрессия, - И так далее ...
Как определить мое свойство assistant_name
, которое получает свое значение на основе значений из двух отношений (assistant и legacy_assistant)?Спасибо!