sqlalchemy 宣言ベースで、select からクラスを定義したいと考えています。多分私は混乱しています と の違いは何ですかsqlalchemy.select()
...session.query()
誰かが私が3歳のように私にこれを説明できれば(Pythonの知識があります)。
次のような単純な結合に問題はありません
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.