Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Suche nach Namen in cx_Oracle

Nicht tun Sie dies in Python. Wenn Sie etwas in einer Datenbanktabelle suchen möchten, ist dies bei Weitem der schnellste und effizienteste Weg in SQL. Vergessen Sie nicht, Bind-Variablen .

Angenommen, Sie haben ein Cursorobjekt curs es könnte etwa so aussehen (vorausgesetzt, Ihre Tabelle ist auf var eindeutig ).

>>> 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

Wenn Sie dann nach etwas suchen, das es nicht gibt, erhalten Sie Folgendes.

>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
...     var = results[0][0]
...     print ('Yes')
... except IndexError:
...     print ('No')
...
No

Der eigentliche Grund, warum Sie nicht das bekommen, was Sie erwarten, ist, dass cx_Oracle eine Liste von Tupeln gemäß PEP 249 . Sie erwarten, dass nur eine Spalte zurückgegeben wird, also müssen Sie auf den 0-Index des Tupels zugreifen, wenn Sie es so machen wollen, wie Sie es tun.

>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
...     if var == row[0]:
...         print ('Yes')
...
Yes