题
下面是我的代码:
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()
。我很好奇,为什么?
解决方案
在 DB-API 规范要求连接到数据库开始一个新的交易,在默认情况下。您必须commit
确认所做的任何更改,或rollback
丢弃它们。
请注意,如果数据库支持自动提交功能,这必须是最初关闭。
纯SELECT
语句,因为他们从来没有对数据库做任何改动,不必有自己的变化承诺。
其他提示
其他人解释为什么犯没有必要在SELECT语句。我只是想指出,你可以利用连接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()
此当有多个插入,更新,以及在同一连接内DELETE语句是特别有用的。
不隶属于 StackOverflow