Domanda

sto cercando di recuperare alcuni dati da una colonna di cui DATA_TYPE = NUMERO (1,0) con questo pezzo di codice:

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

che si lamenta così:

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

La sostituzione colonna 'CANCELLATO' con uno la cui DATA_TYPE = VARCHAR2 non gettare un tale denuncia.

È stato utile?

Soluzione 3

Un work-around sta mettendo time.sleep(1) prima cursor.fetchone():

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

Altri suggerimenti

Sono in esecuzione in questo problema ora usando cx_Oracle 5.0.4 con supporto Unicode. La soluzione accettata di cui sopra non ha funzionato per me. La colonna eliminata in questione è una colonna numerica, che è ciò che provoca questo bug.

Secondo la mailing list ( http: // commenti. gmane.org/gmane.comp.python.db.cx-oracle/2390 ) può essere un bug in Oracle che mostra solo in cx_Oracle con supporto Unicode.

dal link: "Quando costruisco cx_Oracle senza il supporto di Unicode, tutto funziona come previsto. Quando costruisco cx_Oracle con il supporto Unicode, il tentativo di utilizzare una query che restituisce un valore numerico (ad esempio):

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

risultati in questa eccezione:

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

"

Quello che ho fatto per il lavoro intorno ad esso, è l'istruzione SELECT, fare:

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

E 'abbastanza brutto, ma funziona.

Questi tipi di errore è andato via quando ho aggiornato a cx_Oracle 5.1. Se il numero di giri non si installa (come è successo per me su Red Hat 5.5) poi di solito si può rpm2cpio il file, prendere la cx_Oracle.so e metterlo nella directory site-packages python.

Ho avuto lo stesso errore.

Commit mi ha aiutato:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top