【发布时间】:2012-10-06 05:44:52
【问题描述】:
我想在同一张表中有父子关系。以下是我所拥有的,但它不起作用。 “不工作”是指当我在某个Item 对象上调用.children 时,它给了我[]。我的代码中有什么错误以及如何正确执行?谢谢。
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.
【问题讨论】:
-
这很奇怪,你的代码看起来还不错。您可以包含添加子项目的代码吗?您是否检查过当您添加子项时,更改是否已提交到数据库?我认为这可能只是交易的怪异,而不是项目类本身的问题
-
@Sheena,我有这个从其他地方调用的方法:refheap.com/paste/5893。
-
我想我明白出了什么问题。插入语句对象已创建但从未执行。有没有办法使用会话对象来执行它?
标签: python mysql python-3.x sqlalchemy