1

スタックオーバーフローの返信で、 sqlalchemyの作成者であるMike Bayer(zzzeek)が、「Declarativeでは、単純なユースケースではカスタムメタクラスは必要なく、ハードユースケースでもほとんど必要ないことに気づきました。ミックスインとカスタムベースは必要です。ほとんどすべてを行うことができます。」これにより、カスタムメタクラスを使用してsqlalchemyで行っていたことが、declarative_base代わりにミックスイン+カスタムベースを使用して実行できるという期待が高まりました。しかし、私はそれを機能させることができませんでした。ヒントをいただければ幸いです。

ConciseRelationshipMixin簡潔な構文を使用して関係を作成できるミックスインがあります。次のように使用されます。

class Eggs(ConciseRelationshipMixin, OtherMixin1, OtherMixin2):
    pass

Spam = declarative_base(cls=Eggs)

class Ham(Spam):
    some_column = Column(Integer)
    crispy_bacon = ConciseRelationship(Bacon)

これによりHam.__table__、関係のFKと、関係自体を名前で保持するための追加の列が作成され、追加の列の名前Ham.barとのプロジェクト固有の規則が使用されますprimaryjoin。私はこのミックスインが本当に好きです。なぜなら、それはHam見た目の定義が非常に明確で整頓されているからです。

メタクラスを使用せずにこれを実装できなかった理由は、割り当てcrispy_bacon = ...2つの割り当てに変換しようとしているためですが、他の方法はありませんでした。column_for_crispy_bacon = Column(...)crispy_bacon = relationship(...)

また、「こういうことをしてはいけないから……」という形での返信も受け付けています。

4

0 に答える 0