首页 新闻 会员 周边

Python在进行Oracle数据库增删改查时提交无效

-1
悬赏园豆:30 [待解决问题]

各位大佬麻烦帮忙看下,这是什么为题呀,我用Python进行数据库增删改查时,cursor.execute(sql) 返回Null

Lonely丶B的主页 Lonely丶B | 初学一级 | 园豆:172
提问于:2020-03-05 14:36
< >
分享
所有回答(4)
0

你这个是update
你换成select语句再测试一下看看

应该在当前数据库连接下commit
所以正确写法是conn.commit()

墨镜带佬星 | 园豆:2294 (老鸟四级) | 2020-03-05 15:32

你好! 你看我发的截图是我调试的截图,我在调试到执行SQL语句这一步,cursor.execute(sql)时返回None,我这是在操作修改语句,按理说是不是应该返回受影响的行数呀。
并且下面我有commit(),我去查数据库并没有修改迹象。

支持(1) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 15:40

@Lonely丶B: 你不是在当前数据连接上commit的。。。
应该是conn.commit

支持(0) 反对(0) 墨镜带佬星 | 园豆:2294 (老鸟四级) | 2020-03-05 16:29
0

输出一下堆栈except,看看是不是报错了

Beyond-bit | 园豆:2885 (老鸟四级) | 2020-03-05 15:46

你好! 代码运行会输出try最后的修改成功,不会进except里面。因为我是打了多个断点调试的,execute(sql)执行完成后会往下走,没有报错。

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 15:50

@Lonely丶B: 排除这个了,那你试试更新一条别的数据,或者换张表更新试试。可能发生锁表/锁数据的情况。

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2020-03-05 16:08

@Beyond-bit: 你好! 好像还是不行,我先在一张表进行删除,修改,execute(sql)返回的还是None,我又换了张表依旧还是None, 但是执行查询语句的时候都可以查出来,就是执行增删改的时候返回None。

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 16:21

@Lonely丶B:
1.登录数据库终端试试update
2.用命令看一下当前锁的情况。

支持(0) 反对(0) Beyond-bit | 园豆:2885 (老鸟四级) | 2020-03-05 16:28

@Beyond-bit: 你好,通过plsql登录是可以进行修改,删除的,并且通过Pycharm中的DB browser关联数据库也是可以进行修改操作的,就是通过xc_oracle包进行代码更新数据库的时候没反应。很难受的问题。并且也没有锁表

支持(0) 反对(1) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 16:42

@Lonely丶B: 那基本锁定了问题了,代码端的问题。

1.如果肯定你代码没错,也没报错一切正常,有可能库太旧或者库跟数据库服务器版本不匹配。
2.有可能触发python库bug

建议:可以换个python 库试试。

支持(0) 反对(1) Beyond-bit | 园豆:2885 (老鸟四级) | 2020-03-05 16:47

@Beyond-bit: 你好 我python是3.7.4的版本,数据库是oracle 11g 的

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 16:49

@Beyond-bit: 你就别在这误导人家了。cx_Oracle 是oracle官方出的库,并且保持正常更新中,你们这是在怀疑官方没有能力提供能基本正常运行的API?

支持(0) 反对(0) 墨镜带佬星 | 园豆:2294 (老鸟四级) | 2020-03-05 16:56

@codegay: 你好! 你知道这大概是什么问题导致的么 。 我百度了好多python操作oracle数据库的写法,感觉都差不多,找不到是哪里的问题。 你说连不上数据库把,但是查询是可以查出来的,就是增删改不行,执行cursor.execute()返回None

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 21:14

@Lonely丶B: 我上面回复了你不看。

支持(0) 反对(0) 墨镜带佬星 | 园豆:2294 (老鸟四级) | 2020-03-06 00:05

@codegay: 我看到了,Connection我是单独写方法return出来的,一样的。 现在是我换没有到提交的这一步,在执行SQL语句的时候就返回None了,正常来说应该返回受影响的行数。我查询的时候是没问题的。

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-06 00:15
0

有提交事务?

TinaRoot | 园豆:210 (菜鸟二级) | 2020-03-05 21:06

你好!有提交事务,commit(),但是在commit之钱执行cursor.execute(sql)方法时结果返回None,所以下面的提交没有任何意义。 按理说执行增删改sql语句时应该返回受影响的行数。

支持(0) 反对(0) Lonely丶B | 园豆:172 (初学一级) | 2020-03-05 21:10
1

你提交事务是用了一个新对象提交的
原始执行sql的对象是conn,
下边你进行commit的时候,用了Getorcal(),和你之前的conn不是一个对象吧?
也就是下边commit的时候,没有执行任何存储过程

超级大懒虫vip | 园豆:393 (菜鸟二级) | 2020-03-09 22:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册