2013-03-06 2 views
0

У меня есть var='smth' и мне нужно проверить, если var существует в таблице «smtb»Поиск по имени в cx_Oracle

я пытался что-то, но это не работает:

rows=curs.fetchall() 
for row in rows: 
      if var==row: 
       print("Yes") 

При печати элементы строк, я получаю некоторый шаблон, как это:

('element',) 

Как я могу проверить, существует ли var в таблице?

ответ

2

Не Сделайте это в 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 
Смежные вопросы