Department = models.department.Department
association_table = Table('template_department', models.base.Base.instance().get_base().metadata,
Column('template_id', Integer, ForeignKey('templates.id')),
Column('department_id', Integer, ForeignKey('departments.id')))
class Template(models.base.Base.instance().get_base()):
__tablename__ = 'templates'
id = Column(Integer, primary_key=True)
tid = Column(String(7), unique=True)
....
departments = relationship('Department', secondary=association_table)
我试图删除许多template_id和部门之间的关系,但我无法提出执行此操作的查询。有什么方法可以使用Sqlalchemy吗?
答案 0 :(得分:1)
在MySQL中,您可以使用row constructors和IN-operator从 association_table 中删除与这些对匹配的行。例如,如果您有template_id,department_id对的列表,例如:
to_remove = [(1, 1), (2, 2), (3, 3), ...]
然后你可以
from sqlalchemy import tuple_
stmt = association_table.delete().\
where(tuple_(association_table.c.template_id,
association_table.c.department_id).in_(to_remove))
session.execute(stmt)
...
请注意,这会绕过正常的ORM簿记,因此会话中存在的实例现在可能包含陈旧数据。如果您打算立即提交并在需要时重新加载数据,这不是问题。