2010-05-17 156 views
5

这里是我的代码:为什么在进行UPDATE时需要明确提交?

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()。我很好奇,为什么?

回答

12

DB-API规格见wikipedia需要连接到数据库开始新的事务,在默认情况下

选择不改变任何数据。您必须commit确认您所做的任何更改,或者rollback放弃它们。

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

SELECT语句,因为他们从来没有对数据库做任何改动,不必犯有自己的变化。

6

提交用于通知数据库保存当前事务中的所有更改。因此没有保存,因此没有提交

的交易

0

其他人已经解释了为什么在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内相同的语句,这是特别有用连接。

相关问题