既存のデータベースでの python/Elixir インターフェースのかなりの部分はすでに完成しています。私は現在、Elixir をやめて、すべてを純粋な SQLAlchemy に移行することを検討しています。おそらく宣言型メソッドを使用したいと考えています。
この特定の継承関係をどこから始めればよいかさえわかりません。私は、sqlalchemy がこの方法で (または「魔法のように」) 継承を実行するとは思わず、sqlalchemy で同じことがどのように見えるか少し混乱しています。
これは、各クラスが独自のデータベース テーブルにマップされた、ポリモーフィックな複数テーブルの結合です。完了すると、別のクラス (ここには含まれていません) に「Comp」を持つ OneToMany が作成されます。Comp サブクラスには、Comp.id への外部キーである主キーがあります。
class Comp(Entity):
using_options(inheritance='multi')
parent = ManyToOne('Assembly', onupdate='cascade', ondelete='set null')
quantity = Field(Numeric(4), default=1)
def __repr__(self):
return "<Comp>"
## If not familiar with Elixir, each of the following "refid" point to a different
## table depending on its class. This is the primary need for polymorphism.
class CompAssm(Comp):
using_options(inheritance='multi')
refid = ManyToOne('Assembly', onupdate='cascade', ondelete='set null')
def __repr__(self):
return "<CompAssm>"
class CompItem(Comp):
using_options(inheritance='multi')
refid = ManyToOne('Item', onupdate='cascade')
def __repr__(self):
return "<CompItem>"
class CompLabor(Comp):
using_options(inheritance='multi')
refid = ManyToOne('Labor', onupdate='cascade')
def __repr__(self):
return "<CompLabor>"