SQLAlchemy:删除子对象不会更新父对象

时间:2018-09-29 16:24:49

标签: python sqlalchemy

SQLAlchemy 1.2.11中,我有两个这样定义的ORM模型(简化):

from sqlalchemy.orm import (
    Column,
    Integer,
    ForeignKey,
)
from sqlalchemy.orm import relationship

class Parent(Base):
    __tablename__ = 'parent'

    # columns
    id = Column(Integer, primary_key=True)

    # relationships
    children = relationship('Child', back_populates='parent')

class Child(Base):
    __tablename__ = 'child'

    # columns
    id = Column(Integer, primary_key=True)
    parent_id = (Integer, ForeignKey('parent.id', ondelete='cascade'))

    # relationships
    parent = relationship('Parent', back_populates='children')

我正在创建两个对象,将它们添加到会话中并进行刷新:

parent = Parent()
child = Child()
parent.children.append(child)

session.add(child)
session.flush()

最后,我要删除子对象:

session.delete(child)
session.flush()

所有相关的SQL语句均被刷新;最初的插入,以及随后的删除。

由于此会话已被“跟踪”,因此我期望len(parent.children)将是== 0。但是,子对象仍被附加。

我在关系的两侧都使用了cascade选项,但是都没有刷新操作中的会话。通过强制下一组SQL操作在另一个事务块中发生,似乎只有session.commit()停留在其中,从而在调用parent.children路径时导致延迟加载的副作用并将“刷新的” SQL发射到数据库。

我的问题是-是否可以让SQLAlchemy从parent.children中删除它知道在刷新操作中删除的对象,而无需提交

0 个答案:

没有答案