Frage

Ich versuche, einige Daten aus einer Spalte, deren DATA_TYPE = NUMBER (1,0) mit diesem Stück Code zu holen:

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

, die so klagt:

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

Ersetzen 'deleted' Spalte mit einer, dessen DATA_TYPE = VARCHAR2 nicht werfen, eine solche Beschwerde.

War es hilfreich?

Lösung 3

Ein Work-around ist time.sleep(1) vor cursor.fetchone() setzen:

...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])

Andere Tipps

Ich arbeite jetzt in dieses Problem mit cx_Oracle 5.0.4 mit Unicode-Unterstützung. Die oben akzeptierte Lösung nicht für mich arbeiten. Die DELETED Spalte in der Frage ist eine numerische Spalte, das ist, was diesen Fehler verursacht.

Nach der Mailing-Liste ( http: // Kommentare. gmane.org/gmane.comp.python.db.cx-oracle/2390 ) kann es ein Fehler in Oracle sein, dass zeigt nur in cx_Oracle mit Unicode-Unterstützung.

über den Link: „Wenn ich cx_Oracle ohne Unicode-Unterstützung bauen, es funktioniert alles wie erwartet. Als ich cx_Oracle bauen mit Unicode-Unterstützung, zu versuchen, eine Abfrage verwenden dass gibt einen numerischen Wert (wie):

con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()

Ergebnisse in dieser Ausnahme:

cx_Oracle.DatabaseError: OCI-22061: invalid format text [T

"

Was ich um es an die Arbeit getan hat, ist auf der Select-Anweisung, zu tun:

cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
    val = int(row[0])

Es ist ziemlich hässlich, aber es funktioniert.

Diese Arten von Fehlern ging weg, als ich 5,1 bis cx_Oracle aufgewertet. Wenn die RPM nicht installiert (wie es für mich auf Red Hat 5.5 passiert), dann können Sie in der Regel die Datei rpm2cpio, die cx_Oracle.so nehmen und es in Ihre Python site-packages-Verzeichnis.

Ich hatte den gleichen Fehler.

Commit mir geholfen:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top