哪一個是首選的提交方式?這兩種方法在內部究竟發生了什麼?數據庫提交:哪個是首選方式,爲什麼?
1:
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
2:
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
哪一個是首選的提交方式?這兩種方法在內部究竟發生了什麼?數據庫提交:哪個是首選方式,爲什麼?
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
據我瞭解connection1.commit()
將更改寫入數據庫。
在第一個示例中,您每次都在進行提交,這可能需要更長的時間,但哪個「更安全」(在發生崩潰時,更多的數據已寫入數據庫)。
在第二個示例中,在所有更改完成後,您正在寫入數據庫。由於這只是一次寫入操作,所需的時間會更少,儘管從技術上講它不太「安全」。
在正常的環境中,並簡稱爲循環,我會去第二個。如果您的代碼需要數小時才能運行,那麼第一種方法可能對您更好。
假設你的查詢修改數據:
第一種方法意味着數據庫將與每個迭代(項目按項目)所做的更改進行更新。第二種方法意味着只有一次更新,在完成所有項目後,以及所做的所有更改。
與第一種方法的潛在問題可能是:
數據不一致,如果你因爲某些原因沒有完成迭代週期,這是重要的是要有要麼所有的更新或沒有人的;
數據不一致,如果其他人在您更新數據集時查詢該數據集;
擁塞如果您發送太多更新請求(尤其是如果他們每個人都鎖定一個或多個表)。
與第二種方法可能遇到的問題可能是:
由於一次發送太多的數據錯誤;
別人可能已經修改了相同的數據以不同的方式設置,然後輸,因爲你的更新,這是在他們的早期狀態的數據所做的這些更改。根據事務隔離級別,這可能導致數據不一致或您的事務被拒絕。
選擇哪種方法取決於具體的用例。
1的方法,
因爲它提交更改僅一次2
第二種方法類似於批量插入,因爲它僅在所有查詢執行時才提交所有更改。