SQLAlchemy删除并插入相同的事务

时间:2015-12-09 02:08:21

标签: python mysql sqlalchemy flask-sqlalchemy

我正在使用SQLAlchemy并且在一个事务中,我想执行以下操作:

  1. 删除所有符合特定条件的记录(比如Cars.color == red)。
  2. 现在,我想插入符合特定条件的所有汽车(比如Cars.type == Honda)。
  3. 现在假设我的数据库只是一个包含3列(namecolortype)且name为主键的表格。

    如果我的数据库已经有red且类型为Honda且名称为Bob的汽车。我不能只说

    Cars.query.filter(Cars.name == red).delete()
    // add all Hondas
    db.session.commit()
    

    // add all Hondas失败,因为我可能会添加name Bob且颜色为red的汽车。作为一个操作的一部分,我如何进行删除并删除?

    参考:我正在使用MySQL。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

db.session.query(Cars).filter(Cars.name == red).delete()
 // add all Hondas
for h in Hondas:
    db.session.add(h)
db.session.commit()

答案 1 :(得分:0)

警告lector - 我不认为您当前的代码确实正确设置了事务。除此之外,我不相信你描述的问题存在 - session.commit()刷新序列中的变化,所以无论是否调用session.flush(),你都应该能够在你的位置插入Hondas标记 - 在插入数据库之前,红色汽车将被删除。