是否有办法避免在多对多关系中检索要删除的对象?
assign = Table('manytomany', Base.metadata,
Column('pid', String(...), ForeignKey('parent.pid')),
Column('cid', String(...), ForeignKey('child.cid'))
)
class Parent():
....
childs = relationship("Child", secondary = assign, backref = 'parent')
我知道我可以这样做:
obj = session.query(Table).get(pk_id)
session.delete(obj)
但是我想只有一个数据库访问权限,比如:
session.query(Table).filter_by(id = pk_id).delete()
我得到了一个错误,因为多对多rel:
'无法删除或更新父行:外键约束失败…'
有可能吗?非常感谢
使用session.query()
总是首先从数据库检索对象的数据。为了避免这种情况,您必须直接使用与ORM对象关联的表对象。
session.execute(Parent.__table__.delete().where(Parent.id==pk_id))
这将向数据库发出一条DELETE sql语句,删除父记录。(Parent.id
是Parent.__table__.c.id
的同义词)
要解决外键错误,必须先删除assign表中的记录。
session.execute(assign.delete().where(assign.c.pid==pk_id))