簡體   English   中英

Column_property / hybrid_property 用於聯合列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM