1

このコードを使用して、DATA_TYPE = NUM​​BER(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がそのような苦情をスローしない列に置き換えます。

4

4 に答える 4

2

These types of errors went away when I upgraded to cx_Oracle 5.1. If the RPM doesn't install (like it happened for me on Red Hat 5.5) then you can usually rpm2cpio the file, take the cx_Oracle.so and put it into your python site-packages directory.

于 2011-10-09T21:58:50.570 に答える
2

現在、Unicode をサポートする cx_Oracle 5.0.4 を使用して、この問題に直面しています。上記の受け入れられた解決策は私にとってはうまくいきませんでした。質問の DELETED 列は数値列であり、これがこのバグの原因です。

メーリング リスト ( http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390 ) によると、Unicode をサポートする cx_Oracle でのみ表示される Oracle のバグである可能性があります。

リンクから:「Unicode サポートなしで cx_Oracle をビルドすると、すべて期待どおりに動作ます。Unicode サポートを使用して cx_Oracle をビルドすると、(次のような)数値を返すクエリを使用しようとします:

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])

それはかなり醜いですが、うまくいきます。

于 2011-01-11T00:39:21.777 に答える
0

回避策はtime.sleep(1)前に置くことcursor.fetchone()です:

...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])
于 2010-10-29T18:34:24.127 に答える
0

同じエラーが発生しました。

コミットは私を助けました:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
于 2012-01-22T12:45:29.247 に答える