В декларативной базе sqlalchemy я хотел бы иметь класс, определенный из select. Может быть, я в замешательстве, в чем разница между sqlalchemy.select()
и session.query()
... Если бы кто-нибудь мог объяснить мне это, как будто я 3 года (с знанием Python).python sqlalchemy select aliased
У меня нет никаких проблем с простой присоединяется, как
class ViewA(Base):
__select__ = (
sqlalchemy.select([C1.attr1, C2.attr2, ...],
from_obj=C1.__table__.join(C2.__table__)
)
.where(...)
)
__table__ = __select__.alias('view_A')
Я уже использую это в проекте, и она работает, как я ожидал. Теперь я пытаюсь создать еще один вид, но с себя присоединиться, так что я использовал orm.aliased()
, но он не работает, так как он говорит, что я
sqlalchemy.exc.ProgrammingError:
(ProgrammingError) (1066, "Not unique table/alias: 'history'", None)
Вот как я пытаюсь создать мой класс:
class ViewSummary(Base):
_H1 = orm.aliased(C1, name='c1')
_H2 = orm.aliased(C1, name='c2')
__select__ = (
sqlalchemy.select([_H1.attr1, _H1.attr2, ...],
from_obj=(
_H1.__table__
.outerjoin(_H2.__table__, _H1.id == _H2.id)
.join(AnotherClass, _H1.id == AnotherClass.id)
)
.where(_H2.field is None)
)
__table__ = __select__.alias('view_summary')
я ошибаюсь использование orm.aliased
?
Спасибо за вашу помощь, D.