sql >> Database >  >> RDS >> Oracle

Zoek naar naam in cx_Oracle

Niet doen doe dit in Python. Als u iets in een databasetabel wilt zoeken, is veruit de snelste en meest efficiënte manier om dit in SQL te doen. Vergeet niet om bindvariabelen .

Ervan uitgaande dat u een cursorobject curs . heeft het kan er ongeveer zo uitzien (ervan uitgaande dat uw tabel uniek is op 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

Als je dan op zoek bent naar iets dat niet bestaat, krijg je het volgende.

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

De werkelijke reden waarom u niet krijgt wat u verwacht, is dat cx_Oracle een lijst met tuples retourneert volgens PEP 249 . Je verwacht dat er maar één kolom wordt geretourneerd, dus je hebt toegang nodig tot de 0-index van de tuple, als je het wilt doen zoals je bent.

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



  1. Gegevens ophalen van Oracle SP Out Param SYS_REFCURSOR in Unix Korn Shell Script

  2. Hoe PL/SQL Stored Function body in Oracle te zien

  3. CURRENT_TIMESTAMP() Functie in Oracle

  4. Base58 Encoder-functie in PostgreSQL