Oracle
 sql >> Base de données >  >> RDS >> Oracle

Rechercher le nom dans cx_Oracle

Ne pas faites cela en Python. Si vous souhaitez rechercher quelque chose dans une table de base de données, le moyen le plus rapide et le plus efficace est de loin de le faire en SQL. N'oubliez pas d'utiliser variables de liaison .

En supposant que vous ayez un objet curseur curs cela pourrait ressembler à ceci (en supposant que votre table est unique sur 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

Ensuite, si vous cherchez quelque chose qui n'existe pas, vous obtenez ce qui suit.

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

La raison réelle pour laquelle vous n'obtenez pas ce que vous attendez est que cx_Oracle renvoie une liste de tuples selon PEP 249 . Vous vous attendez à ce qu'une seule colonne soit renvoyée, vous avez donc besoin d'un accès à l'index 0 du tuple, si vous voulez le faire comme vous le faites.

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