Oracle
 sql >> Database >  >> RDS >> Oracle

Cerca il nome in cx_Oracle

Non fallo in Python. Se vuoi cercare qualcosa in una tabella di database di gran lunga il modo più rapido ed efficiente è farlo in SQL. Non dimenticare di utilizzare associare le variabili .

Supponendo che tu abbia un oggetto cursore curs potrebbe assomigliare a questo (supponendo che la tua tabella sia univoca su 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

Quindi, se stai cercando qualcosa che non esiste, ottieni quanto segue.

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

Il vero motivo per cui non ottieni ciò che ti aspetti è che cx_Oracle restituisce un elenco di tuple secondo PEP 249 . Ti aspetti che venga restituita solo una colonna, quindi è necessario accedere all'indice 0 della tupla, se vuoi farlo nel modo in cui sei.

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