Pregunta

Estoy tratando de buscar unos datos de una columna cuyo DATA_TYPE = número (1,0) con este pedazo de código:

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

, que se queja de este modo:

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

Sustitución de la columna 'borrada' con uno cuya DATA_TYPE = VARCHAR2 no lanzar una reclamación de este tipo.

¿Fue útil?

Solución 3

Una solución alternativa es poner time.sleep(1) antes cursor.fetchone():

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

Otros consejos

Me postulo para este problema ahora usando cx_Oracle 5.0.4 con soporte Unicode. La solución aceptada anterior no ha funcionado para mí. La columna eliminados en la pregunta es una columna numérica, que es lo que causa este error.

De acuerdo con la lista de correo ( http: // comentarios. gmane.org/gmane.comp.python.db.cx-oracle/2390 ) puede ser de un error de Oracle que muestra sólo en cx_Oracle con Unicode apoyo.

desde el enlace: "Cuando construyo cx_Oracle sin el soporte Unicode, todo funciona como se esperaba. Cuando construyo cx_Oracle por soporte Unicode, al intentar utilizar una consulta que devuelve un valor numérico (como):

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

resultados en esta excepción:

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

"

Lo que hice para el trabajo alrededor de ella, se encuentra en la instrucción de selección, hacer:

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

Es bastante feo, pero funciona.

Este tipo de errores se fue cuando actualicé a cx_Oracle 5.1. Si las RPM no se instala (como sucedió para mí en Red Hat 5.5), entonces por lo general puede rpm2cpio el archivo, tomar la cx_Oracle.so y ponerlo en su directorio site-packages de Python.

Yo tenía el mismo error.

Commit me ayudó:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top