You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:17:42