2014-02-28 33 views
1

所以說我想改變一個數據庫中的一組項目的屬性,使用for循環。 (使用瓶+ SQLAlchemy的)Python的何時提交數據庫連接?

我應該做的整個循環結束後提交:

for item in items: 
    do stuff 
db.session.commit() 

或者在每次迭代後?

for item in items: 
    do stuff 
    db.session.commit() 
+1

第一個。你在每次迭代中都沒有獲得任何東西。 – msvalkon

+0

好的,謝謝。我對此進行了調查,但並不清楚。 –

回答

1

畢竟迭代後你必須commit

commit對每個值的更改或每次迭代都不是一個好的解決方案。

1

如果您確定自己的數據處於預期的的狀態,則應該提交。也就是說,當您的commit之後的下一個操作失敗時,您不關心是否有人閱讀結果。

在這種情況下,您很可能不會期望您的物品的一部分位於數據庫中,並且部分物品會丟失。所以你應該在之後提交這個循環。

同樣對對象進行操作;在下列情況下,如果名字改變了,你會好嗎,但不是最後一個名字?

def change_fullname(): 
    user = get_user() 
    user.first_name = 'Woop' 
    user.last_name = 'Bar' 

號因爲那不是操作是什麼應該做的,我們不希望有人讀取用戶只有已更改一個名字。因此,只有在完成所有屬性更改後才提交。