sql >> Base de Datos >  >> RDS >> Oracle

Buscar nombre en cx_Oracle

No haz esto en Python. Si desea buscar algo en una tabla de base de datos, la forma más rápida y eficiente es hacerlo en SQL. No olvide usar vincular variables .

Suponiendo que tiene un objeto de cursor curs podría verse así (suponiendo que su tabla sea única en var ).

>>> sql = "select * from my_table where var = :var"
>>> bind_variables = {'var' : 'smth'}
>>>
>>> curs.execute(sql, bind_variables)
[<cx_Oracle.STRING with value None>]
>>> results = curs.fetchall()
>>> results
[('smth',)]
>>> try:
...     var = results[0][0]
...     print ('Yes')
... except IndexError:
...     print ('No')
...
Yes

Luego, si está buscando algo que no existe, obtendrá lo siguiente.

>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
...     var = results[0][0]
...     print ('Yes')
... except IndexError:
...     print ('No')
...
No

La razón real por la que no obtiene lo que espera es que cx_Oracle devuelve una lista de tuplas según PEP 249 . Espera que solo se devuelva una columna, por lo que necesita acceder al índice 0 de la tupla, si desea hacerlo de la manera que lo hace.

>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
...     if var == row[0]:
...         print ('Yes')
...
Yes