使用Python向Oracle SQL插入数据后进程结束数据丢失问题求助
解决Python插入Oracle数据后进程结束数据丢失的问题
这问题我之前也碰到过!核心原因就是Oracle默认不会自动提交事务——你执行完INSERT操作后,数据只是在当前数据库会话的临时空间里生效,但没真正写入磁盘的表中。一旦Python进程结束,这个未提交的事务就会被数据库自动回滚,所以你在进程里能查到数据,直接查数据库表就看不到了。
给你修改后的代码,关键就是加上事务提交的步骤:
def submit_button(roll_no,name,marks): sql_query = 'INSERT INTO assignment_7 VALUES (:r,:n,:m)' c.execute(sql_query,[int(roll_no),name,int(marks)]) # 必须显式提交事务,数据才会持久化到表中 conn.commit() # 这里的conn是你之前创建的数据库连接对象,比如cx_Oracle.connect(...)返回的那个 c.execute('SELECT * FROM assignment_7') for rows in c: print(rows[0],'-',rows[1],'-',rows[2])
再给你补充几个细节:
- Oracle的所有DML操作(INSERT、UPDATE、DELETE)都属于事务的一部分,必须通过
commit()来确认这些操作的有效性 - 如果你有多个连续的DML操作,可以在所有操作完成后再统一提交,不用每一步都提交,但一定要在进程退出前执行一次
commit() - 另外记得程序结束时关闭游标和连接(
c.close()、conn.close()),虽然这不是数据丢失的直接原因,但能避免数据库资源泄漏
内容的提问来源于stack exchange,提问作者Aryan Sharma
相关产品推荐
相关产品推荐

