【发布时间】:2016-04-18 22:09:52
【问题描述】:
我的模型中有一个自引用数据结构。可以这样形容
class Example(Base):
__tablename__ = 'example'
id = Column(Integer, primary_key=True)
title = Column(String(255))
parent_id = Column(Integer, ForeignKey('example.id'), nullable=True)
parent = relationship("Example")
我想在会话中创建一个包含一个或多个孩子的父级。我的第一个方法是:
- 创建会话
- 更新/插入父级 (
session.merge) - 提交/关闭会话
- 创建新会话,加载父级,创建子级
- 设置
child.parent_id = parent.id - 提交/关闭会话
由于我想将整个过程作为事务处理,因此我想将其放在一个会话中。
如果我使用一个会话,我的问题:
设置child.parent = parent 会导致类型错误:ypeError: Incompatible collection type: None is not list-like。设置child.parent_id = parent.id 不起作用,因为尚未设置parent.id。
【问题讨论】:
-
不应该 parent_id 引用不同表的主键吗?不是自己表的键?
-
这是一个自引用模型,根据我的理解,可能
-
如果你提到你自己,我不相信你需要任何形式的
relationship(尤其是如果你不在乎它是否可以为空) -
如果数据在父子关系中相关,则应通过外键链接以具有触发器,该触发器将在删除父级时清除所有子级。
Null表示顶层的父级
标签: python sqlalchemy