避免在多对多的SQLAlchemy中检索要删除的对象

时间:2013-04-25 13:41:29

标签: python sqlalchemy many-to-many

有没有办法避免在多对多关系中检索要删除的对象?

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而出错:

  

'无法删除或更新父行:外键约束失败......'

有可能吗? 很多

1 个答案:

答案 0 :(得分:2)

使用session.query()将始终首先从数据库中检索对象的数据。为避免这种情况,您必须直接使用与ORM对象关联的表对象。

session.execute(Parent.__table__.delete().where(Parent.id==pk_id))

这将向数据库发出单个DELETE sql语句,删除父记录。 (Parent.idParent.__table__.c.id

的同义词

要解决外键错误,您必须先删除assign表中的记录。

session.execute(assign.delete().where(assign.c.pid==pk_id))