为什么在进行UPDATE时需要明确提交?

时间:2010-05-17 09:45:54

标签: python cx-oracle

这是我的代码:

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(),则表格不会更新。但对于select语句,我不需要conn.commit()。我很好奇为什么?

3 个答案:

答案 0 :(得分:19)

DB-API规范要求默认情况下连接到数据库会开始新事务。您必须commit确认所做的任何更改,或rollback将其丢弃。

  

请注意,如果数据库支持自动提交功能,则必须先关闭此功能。

SELECT语句,因为它们从不对数据库进行任何更改,所以不必提交更改。

答案 1 :(得分:6)

commit用于告诉数据库保存当前事务中的所有更改。

选择不会更改任何数据,因此无需保存任何内容,因此无需提交

请参阅wikipedia了解交易

答案 2 :(得分:1)

其他人已经解释了为什么SELECT语句不需要提交。我只是想指出你可以利用Connection对象的autocommit属性来避免自己手动执行提交:

import cx_Oracle

with cx_Oracle.connect(usr, pwd, url) as conn:
    conn.autocommit = True
    cursor = conn.cursor()
    cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
    cursor.close()

当在同一连接中有多个INSERT,UPDATE和DELETE语句时,这尤其有用。