Недей направете това в Python. Ако искате да търсите нещо в таблица на база данни, най-бързият и ефективен начин е да го направите в SQL. Не забравяйте да използвате свързващи променливи .
Ако приемем, че имате курсорен обект curs
може да изглежда нещо подобно (ако приемем, че вашата таблица е уникална на 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
След това, ако търсите нещо, което не съществува, получавате следното.
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
Действителната причина, поради която не получавате това, което очаквате, е, че cx_Oracle връща списък от кортежи според PEP 249 . Очаквате да бъде върната само една колона, така че имате нужда от достъп до индекса 0 на кортежа, ако искате да го направите по начина, по който сте.
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes