[英]Column_property / hybrid_property for union a list
情況如下。 我有一個包含兩個列表的表,包括與另一個表的關系。 一個子條目可以有一個或兩個父母(主要是兩個;)。 父母區分每個家庭的孩子。 這個結構是固定的。
現在我想要一個名為 all_children 的列,它直接在同一個表中包含所有家庭的所有孩子(因為直接石墨烯集成)。 有兩種主要方法:column_property 或 hybrid_property。 但不幸的是,所有使用這兩種方法的測試,例如簡單地將兩個列表與 python 連接起來的幼稚想法都失敗了
class Parent(Base):
id = Column(Integer, primary_key=True, autoincrement="auto")
children_family_1 = relationship(Child, backref='child_1', cascade='all, delete', lazy='select', foreign_keys='[Child.ref_1_id]')
children_family_2 relationship(Child, backref='child_2', cascade='all, delete', lazy='select', foreign_keys='[Child.ref_2_id]')
all_children = column_property(children_family_1 + children_family_2)
@hybrid_property
def all_children(self):
return self.children_family_1 + self.children_family_2
@all_children.expression
def all_children(cls):
return select(??)
class Child(Base):
id = Column(Integer, primary_key=True, autoincrement="auto")
ref_1_id = Column(Integer, ForeignKey('parent.id'))
ref_2_id = Column(Integer, ForeignKey('parent.id'))
看來,我實際上沒有足夠的 sqlalchemy 知識來評估和實施正確的方法。 請告訴我,我應該在這個用例中使用哪個以及如何按照描述實現它。 提前致謝。
@hybrid_property
def children(self) -> [Child]:
if self.children_family_1 is None:
self.children_family_1 = []
if self.children_family_2 is None:
self.children_family_2 = []
return self.children_family_1 + self.children_family_2
@children.expression
def children(cls) -> [Child]:
return (
select().where(
or_(
Child.ref_1_id == cls.id,
Child.ref_2_id == cls.id
)))
感謝您對差異的解釋-> https://martinheinz.dev/blog/28
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.