Python向Oracle表插入数据无报错但SQL Developer查询为空
问题核心原因
你遇到的问题是Oracle事务未提交导致的:Oracle数据库默认使用手动事务提交模式,你使用的Python Oracle连接库(通常为cx_Oracle或oracledb)默认autocommit参数为关闭状态,你执行的INSERT操作仅在当前Python连接的会话中可见,未持久化到数据库,其他会话(包括Oracle SQL Developer的连接)受事务隔离性限制,无法查询到未提交的数据。同一连接内执行SELECT能看到结果是因为当前会话可以读取自身未提交的变更。
修复方案
- 方案1:手动提交事务(推荐)
所有INSERT操作执行完成后,调用连接的commit方法提交事务即可,修改你的INSERT代码如下:
cursor = conn.cursor() data = [ ('Mina', 20), ('Minoo', 32), ('Sara', 22), ('Ehssan', 25), ('Ladan', 55) ] for row in data: cursor.execute(""" insert into INSERT_TEST (FISRT_COLUMN, SECOND_COLUMN) values (:1, :2)""", row) # 新增事务提交语句 conn.commit()
如果执行过程中需要撤销变更,可以调用conn.rollback()回滚所有未提交的操作。
- 方案2:开启自动提交
创建数据库连接时设置autocommit=True,后续所有执行的SQL语句会自动提交,无需手动调用commit方法,示例如下:
# cx_Oracle与新版oracledb库用法一致 import oracledb conn = oracledb.connect( user="你的数据库用户名", password="你的数据库密码", dsn="你的数据库连接DSN", autocommit=True )
注意:批量操作场景下手动提交性能远优于自动提交,优先推荐使用方案1。
验证步骤
提交事务后,在Oracle SQL Developer中执行查询前可以先执行COMMIT;刷新会话状态,再执行SELECT * FROM INSERT_TEST;即可看到插入的数据。
内容的提问来源于stack exchange,提问作者Sara Moradi
相关产品推荐
相关产品推荐

