2015-12-09 63 views
0

我已經正在使用的SQLAlchemy和一個事務中,我要做到以下幾點插入:SQLAlchemy的刪除和在同一交易

  1. 刪除符合特定標準(說這是Cars.color == red)的所有記錄。
  2. 現在,我想插入所有符合特定條件的車輛(如Cars.type == Honda)。

現在讓我們說,我的數據庫僅僅是一個3列(namecolortype)與name作爲表的主鍵。

如果我的數據庫已經有車是redHonda類型名稱爲Bob。我不能隨便說

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

// add all Hondas將失敗,因爲我有可能被作爲Bob和顏色red增加了車name。我如何做刪除操作並刪除操作作爲一個操作的一部分?

參考:我正在使用MySQL。

回答

0

警告講師 - 我不認爲你現在的代碼確實設置了交易。除此之外,我不認爲你描述的問題存在 - session.commit()會刷新序列中的更改,因此無論是否調用session.flush(),都應該能夠將Hondas插入到您指定的位置標記 - 在插入命中數據庫之前,紅色汽車將被刪除。

1

你可以試試這個:

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