Почему потребность фиксировать явно при выполнении ОБНОВЛЕНИЯ?

Вот мой код:

import cx_Oracle

conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
conn.commit()

Если я удаляю conn.commit(), таблица не обновляется. Но для избранных операторов, мне не нужно это conn.commit(). Мне любопытно почему?

9
задан tshepang 14 June 2014 в 19:36
поделиться

2 ответа

Спецификация DB-API требует, чтобы подключение к базе данных по умолчанию начало новой транзакции. Вы должны commit, чтобы подтвердить любые внесенные изменения, или откат, чтобы отменить их.

Обратите внимание, что если база данных поддерживает функцию автоматической фиксации, она должна быть изначально отключена.

Операторы Pure SELECT, поскольку они никогда не вносят никаких изменений в базу данных, не должны быть зафиксированы.

21
ответ дан 4 December 2019 в 07:34
поделиться

commit используется для указания базе данных сохранить все изменения в текущей транзакции.

Select не изменяет никаких данных, поэтому нечего сохранять и, следовательно, нечего фиксировать

См. википедию для транзакций

6
ответ дан 4 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: