Не Сделайте это в Python. Если вы хотите что-то искать в таблице базы данных, самым быстрым и эффективным способом является выполнение этого в SQL. Не забудьте использовать bind variables.
Предполагая, что у вас есть объект-курсор 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