У меня есть код следующим образом:
try:
conn = db_connection()
cur = conn.cursor()
if is_address_changed(vehicle, conn, cur):
update_vehicle_address(vehicle, conn, cur)
conn.commit()
if is_price_changed(vehicle, conn, cur):
update_vehicle(vehicle, conn, cur)
insert_vehicle_price(vehicle, conn, cur)
conn.commit()
conn.close()
except Exception as e:
capture_error(str(e))
Таким образом, в моем коде у меня есть conn.commit()
в if statements
.
Это правильный подход? Или я могу добавить только один выше conn.close()
Что произойдет в одном и в другом случае?
Способ, которым работает вышеприведенный код, заключается в том, что поведение было бы точно таким же, если бы у вас был один вызов commit()
над вызовом close()
. Поэтому, чтобы сделать код более читаемым, было бы лучше иметь один вызов. Это также облегчило бы изменение кода, не забывая о вызове commit()
.
Что касается того, как писать код базы данных, обычно лучше всего совершить как можно раньше - прямо перед закрытием, если это возможно. Это означает, что если что-то пойдет не так, вы можете легко отбросить все данные. Исключения были бы, если бы вы явно знали, что хотите, чтобы часть обновления прошла, даже если последняя часть не удалась.