Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Procure por nome em cx_Oracle


Não faça isso em Python. Se você deseja pesquisar algo em uma tabela de banco de dados, a maneira mais rápida e eficiente é fazê-lo em SQL. Não se esqueça de usar variáveis ​​de ligação .

Supondo que você tenha um objeto cursor curs pode ser algo assim (assumindo que sua tabela é única em 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

Então, se você está procurando por algo que não existe, você obtém o seguinte.
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
...     var = results[0][0]
...     print ('Yes')
... except IndexError:
...     print ('No')
...
No

A razão real pela qual você não obtém o que espera é que o cx_Oracle retorna uma lista de tuplas conforme PEP 249 . Você está esperando que apenas uma coluna seja retornada, então você precisa acessar o índice 0 da tupla, se quiser fazê-lo da maneira que está.
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
...     if var == row[0]:
...         print ('Yes')
...
Yes