Nie zrób to w Pythonie. Jeśli chcesz wyszukać coś w tabeli bazy danych, zdecydowanie najszybszym i najskuteczniejszym sposobem jest zrobienie tego w SQL. Nie zapomnij użyć zmiennych wiązania .
Zakładając, że masz obiekt kursora curs
może wyglądać mniej więcej tak (zakładając, że twoja tabela jest unikalna na 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
Jeśli szukasz czegoś, co nie istnieje, otrzymasz następujące informacje.
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
Faktycznym powodem, dla którego nie otrzymujesz tego, czego oczekujesz, jest to, że cx_Oracle zwraca listę krotek zgodnie z PEP 249 . Oczekujesz, że zostanie zwrócona tylko jedna kolumna, więc potrzebujesz dostępu do indeksu 0 krotki, jeśli chcesz to zrobić w taki sposób, w jaki jesteś.
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes