繁体   English   中英

如何在sqlalchemy中使用关系更改父级?

[英]How to change parent using relations in sqlalchemy?

这是与backref和delete级联关系的简单示例。

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('Parent.id'))
    parent = relation(
        'Parent',
        backref=backref('children', cascade='delete, delete-orphan')
    )

需要将一些子代从一个父代重新分配给另一个父代,然后需要删除另一个父代,但是sqlalchemy会在删除父代之前删除子代...

p1 = Session.query(Parent).get(...)
p2 = Session.query(Parent).get(...)

p1.children.extend(p2.children)
Session.delete(p2)
Session.commit()

日志:

... [worker 0] UPDATE child SET parent_id=%(parent_id)s WHERE child.id = %(child_id)s
...
... [worker 0] DELETE FROM child WHERE child.id = %(id)s
...
... [worker 0] DELETE FROM parent WHERE parent.id = %(id)s
...
... [worker 0] COMMIT

需要以某种方式将孩子与另一位父母分开...

我可以建议的唯一解决方案是:

p1 = Session.query(Parent).get(...)
p2 = Session.query(Parent).get(...)

for child in p2.children[:]:
    child.parent = p1

Session.delete(p2)
Session.commit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM