5

同じテーブルに親子関係を持たせたい。以下は私が持っているもので、機能していません。.children「機能しない」とは、あるItemオブジェクトを呼び出すと、 が返されることを意味していました[]。私のコードのエラーは何ですか?それを正しく行う方法は? ありがとう。

parents_children = Table('parents_children', Base.metadata,
                         Column('parent_id', bigint, ForeignKey('items.id', name='a'), primary_key=True),
                         Column('child_id', bigint, ForeignKey('items.id', name='b'), primary_key=True)
                         )

class Item(Base):
    __tablename__ = 'items'
    id = Column(bigint, primary_key=True, autoincrement=True)
    name = Column(types.String(80), default="")
    display_name = Column(types.String(80), default="")
    version = Column(types.String(80), default="")
    discriminator = Column(item_tag_enum, nullable=False)
    children = relationship('Item',
                            secondary=parents_children,
                            primaryjoin=id == parents_children.c.parent_id,
                            secondaryjoin=id == parents_children.c.child_id,
                            backref='parents')
    __mapper_args__ = {'polymorphic_on' : discriminator}

 # Item subclasses omitted because that's irrelevant to the question.
4

2 に答える 2

2

もっと簡単な方法があると思います...(これが私のやり方です)

def adopt(parent_id,child_id):
    parent = DBSession.query(Item).get(parent_id)
    child  = DBSession.query(Item).get(child_id)
    parent.children.append(child)
于 2012-10-16T10:01:32.167 に答える
0

わかりました、問題は解決しました。

挿入ステートメント オブジェクトを作成していましたが、実行していませんでした。

私が持っていたもの:

def adopt(parent_id, child_id):
    print('{} adopts {}'.format(parent_id, child_id))
    parents_children.insert(values=dict(parent_id=parent_id, child_id=child_id))

私が今持っているもの:

def adopt(parent_id, child_id):
    print('{} adopts {}'.format(parent_id, child_id))
    i = parents_children.insert(values=dict(parent_id=parent_id, child_id=child_id))
    conn = engine.connect()
    conn.execute(i)

これで、すべてが期待どおりに機能します。

したがって、問題は、元の投稿に含めたスニペット以外の場所にありました。お手数ですが、質問を削除してください。

于 2012-10-16T08:43:19.590 に答える