我對web2py比較新,所以請裸露在我身邊。web2py/DAL - db.commit()是否讓您不需要多次編輯數據庫?
考慮這個表
db.define_table('people' , Field('name'))
我的理解是,我可以在這樣的數據庫更新記錄:
選項1:
for row in db(db.people).select():
row.update_record(name='Bob')
選項2:
for row in db(db.people).select(id):
db(db.people.id == row.id).update(name='Bob')
db.commit()
有什麼不同? .commit()
命令是否基本上一次執行所有更改,從而在更新期間阻止數據庫訪問?雖然選項1更新每個記錄在一段時間,因此在這段時間內可以明確指出數據庫被寫在update_record
命令之間?
謝謝
EDIT1
這是我的(可能是不正確的)的理解是db.commit()
需要如果上述代碼(選項2)被放置在模塊而不是控制器中,因此db.commit()
命令。
謝謝,我有點困惑。你是說選項1和選項2是否相同?我認爲'row.update_record'立即提交更改,而'set.update'等待'db。提交()'無論是由於控制器還是像我的示例一樣的手動操作。此外,燁我知道您建議的多重更新方法,但在我的真實情況下,每個記錄更新與它自己的價值。 – evan54
不,row.update_record不立即提交。也許你指的是'row.update'和'row.update_record'之間的區別。前者更新'row'對象本身,但對數據庫記錄沒有影響,而後者更新數據庫(但實際更新直到請求結束纔會提交)。 – Anthony