Nicht tun Sie dies in Python. Wenn Sie etwas in einer Datenbanktabelle suchen möchten, ist dies bei Weitem der schnellste und effizienteste Weg in SQL. Vergessen Sie nicht, Bind-Variablen .
Angenommen, Sie haben ein Cursorobjekt curs
es könnte etwa so aussehen (vorausgesetzt, Ihre Tabelle ist auf var
eindeutig ).
>>> 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
Wenn Sie dann nach etwas suchen, das es nicht gibt, erhalten Sie Folgendes.
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
Der eigentliche Grund, warum Sie nicht das bekommen, was Sie erwarten, ist, dass cx_Oracle eine Liste von Tupeln gemäß PEP 249 . Sie erwarten, dass nur eine Spalte zurückgegeben wird, also müssen Sie auf den 0-Index des Tupels zugreifen, wenn Sie es so machen wollen, wie Sie es tun.
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes