奇怪的Oracle error:"无效的格式文本"
-
27-09-2019 - |
题
我试图获取某些数据从一个柱其DATA_TYPE=NUMBER(1,0)的这段代码:
import cx_Oracle
conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
print(cursor.fetchone()[0])
它抱怨,因此:
Traceback (most recent call last):
File "main.py", line 247, in <module>
check = completed()
File "main.py", line 57, in completed
deleted = cursor.fetchone()[0]
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
取代'DELETED'列与一个其DATA_TYPE=VARCHAR2不会引发这样的申诉。
解决方案 3
一个工作周围是把 time.sleep(1)
之前 cursor.fetchone()
:
...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])
其他提示
我在这个问题现在使用您5.0.4与Unicode支持。上述接受的解决方案并没有为我工作。删除列在该问题是一个数字列,这是什么原因导致这一错误。
根据邮件列表( http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390 )它可能是一个错误在Oracle,显示只有在您用Unicode支持。
从链接:"当我建立您没有Unicode支持,这一切工作,如预期的那样。当我建立您 与 Unicode的支持,试图使用一种查询 返回数值(例如):
con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()
结果,在这个例外:
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
"
我做了什么工作,是在选择的声明,这样做:
cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
val = int(row[0])
这是很丑陋的,但它的工作。
这些类型的错误走了,当我升级到您5.1.如果转不安装(喜欢它的发生,我在红帽子5.5)然后你可以从rpm2cpio的文件,采取您.因此,并把它放到你的蟒蛇的网站-包装目录。
我有同样的错误。
承诺帮助我:
conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
不隶属于 StackOverflow