Python 在sqlalchemy中是否可以将被动_删除与lazy='select'一起使用?

Python 在sqlalchemy中是否可以将被动_删除与lazy='select'一起使用?,python,sqlalchemy,Python,Sqlalchemy,我试着这样做: class Parent(Base): __tablename__ = 'parents' id = Column(Integer, primary_key=True) class Child(Base): id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parents.id')) Parent = relationship('P

我试着这样做:

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

class Child(Base):
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parents.id'))
    Parent = relationship('Parent', backref=backref('children', passive_deletes=True))

parent = db.session.query(Parent).filter(id=some_id).first()
print parent.children
db.session.delete(parent)
db.session.commit()
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 = relationship('Parent', backref=backref('children', cascade='all, delete-orphan'))

parent = db.session.query(Parent).filter(id=some_id).first()
db_session.delete(parent)
db_session.commit()
我不希望sqlalchemy为删除子项创建大量查询。我有外键约束,而不是它。但我得到了一个错误:

sqlalchemy.exc.IntegrityError: (IntegrityError) null value in column "parent" violates not-null constraint

这是因为我没有在关系参数中使用lazy='dynamic'选项。但是我不能使用该选项,因为joinedload选项不能与lazy='dynamic'选项一起使用。如何避免这些问题?

首先,请改进您的问题,因为它包含几个错误。工作解决方案如下所示:

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

class Child(Base):
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parents.id'))
    Parent = relationship('Parent', backref=backref('children', passive_deletes=True))

parent = db.session.query(Parent).filter(id=some_id).first()
print parent.children
db.session.delete(parent)
db.session.commit()
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 = relationship('Parent', backref=backref('children', cascade='all, delete-orphan'))

parent = db.session.query(Parent).filter(id=some_id).first()
db_session.delete(parent)
db_session.commit()
如果要删除父级及其子级,必须使用选项cascade='all,delete orphan'来删除关系

不幸的是,我无法从doc中复制被动_deletes=True指令的示例: 见我的问题:

我找到了一些解决方案:db.session.queryParent.filterParent.id==parent.id.delete