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

标签 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()

由于多对多关系,我得到了一个错误:

'Cannot delete or update a parent row: a foreign key constraint fails...'

这可能吗? 非常感谢

最佳答案

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

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

这将向数据库发出一条删除父记录的 DELETE sql 语句。 (Parent.idParent.__table__.c.id 的同义词)

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

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

关于python - 避免在多对多 rel SQLAlchemy 中检索要删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216374/

相关文章:

python - 性能 SQLAlchemy 和或

python - 使用 Flask ReSTLess 自定义 GET 方法

java - 通过 HQL 检索多对多集合和属性

mysql - 查询以从多对多关系获取对象

mysql - 连接表(关联表)是否有主键?多对多关系

python - 使用 django 和 ajax 时出现 NoReverseMatch 错误

具有可重复参数对的 Python argparse 参数

python - SQLAlchemy 通过关联对象声明多对多自连接

c++ - 改变非正数除法的 python 数学模块行为

python - 将数字字段添加到 Django 模型