Oracle
 sql >> база данни >  >> RDS >> Oracle

Потърсете име в cx_Oracle

Недей направете това в 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намеря дефиницията на наименувано ограничение в Oracle?

  2. Oracle оптимизира OR + IN до OR + EXISTS, което е много бавно

  3. Как да прехвърля дъмп файл на Oracle към екземпляр на AWS RDS?

  4. Функциите на прозореца са СРЕДНО скъпи, можем ли да го преодолеем?

  5. Използване на обвързващи променливи на Oracle с LIKE в C#