我希望在同一个表中拥有父子关系。以下是我所拥有的,它不起作用。通过“不工作”,我的意思是当我在某个.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.
答案 0 :(得分: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)
答案 1 :(得分:0)
好的,问题解决了。
我正在创建一个insert语句对象,但没有执行它。
我有什么:
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)
现在一切都按预期工作了。
所以问题出在其他地方,而不是我在原帖中包含的片段。请随时删除该问题。