python cx_Oracle 游标不返回有效查询的行
Posted
技术标签:
【中文标题】python cx_Oracle 游标不返回有效查询的行【英文标题】:python cx_Oracle cursor returns no rows for valid query 【发布时间】:2016-07-18 16:34:49 【问题描述】:在这个问题上我的头撞在我的桌子上。
我的 cx_Oracle 游标没有返回有效查询的行,我不知道为什么。
相同的连接从相同架构中的其他表返回预期结果...例如,如果我只是将查询中引用的表名从 TABLE_A 更改为 TABLE_B,它就可以正常工作。
使用相同的用户/连接字符串,查询在 SQL Developer/SQL Plus 中运行良好。我在调试期间从 cursor.statement 复制/粘贴以验证完全相同的语句,没有拼写错误。
我已将查询简化为可能的最简单形式;
1. select * from SCHEMA.TABLE_A
和
2. select * from SCHEMA.TABLE_B
查询 1 在使用 cx_Oracle 执行时不返回任何行,但在 SQLPlus/SQL Developer 等中返回预期的行。
查询 2 使用 cx_Oracle 按预期工作
我已经验证了权限 - 但这显然是有效的,因为我正在使用(并验证)cx_Oracle 中的用户/连接与 SQL 工具中的相同。
代码无法再减少/简化我不认为要隔离问题 - 但我可能对一些非常明显的事情视而不见:
import cx_Oracle
db_conn=cx_Oracle.connect('user/password@localhost:1521/TEST_PDB')
cur = db_conn.cursor()
qry = 'select * from SCHEMA_NAME.TABLE_A'
cur.execute(qry)
cx_Oracle.Cursor on cx_Oracle.Connection to user@localhost:1521/TEST_PDB
cur.fetchall()
[]
cur.rowcount
0
然而,另一个表/查询工作:
qry = 'select * from SCHEMA_NAME.TABLE_B'
cur.execute(qry)
cur.fetchall()
[(12320573611891L, '23.5.2126981', 0, 'NEW', 'UPDATE', datetime.datetime(2016, 5, 24, 9, 0), 48, 0, 无, 无)]
这是我遇到过这个问题的唯一一张桌子——据我所知。
我正在使用 Oracle 12c、python 2.7.11 64 位、ojdbc6.jar 和 64 位 InstantClient
有什么想法吗? 发现我的眼睛或大脑看不到明显的地方吗?
【问题讨论】:
表的实际名称是什么? Table_A 可能是Oracle reserved word? 【参考方案1】:我发现我对这个问题视而不见。
记录未提交。 我能够使用同一用户查询插入它们的会话中的记录 (SQL Developer)。
这导致了“到底发生了什么” 我应该知道/更好。
【讨论】:
您可以通过接受您自己的答案来帮助减少没有接受答案甚至任何答案的问题列表。请阅读meta.stackexchange.com/questions/16930/… 了解有关回答您自己的问题的更多信息。 谢谢,这节省了我一些时间!我就像你说的 - 我也应该知道这是问题所在。未提交的更改之前已经引起了我的注意! 所以,对于 cx_oracle 之后execute
函数 connection.commit()
为我工作。以上是关于python cx_Oracle 游标不返回有效查询的行的主要内容,如果未能解决你的问题,请参考以下文章
mysql python pymysql模块 增删改查 查询 字典游标显示
如何使用 cx_Oracle 在 Python 中返回 SQLPLUS 变量
python中cx_oracle.sessionpool()函数返回值是啥
在 Python 中使用 cx_Oracle 和 xlrd 列出列表的 executemany() 正在返回 TypeError