sql >> Database teknologi >  >> RDS >> Oracle

Søg efter navn i cx_Oracle

Gør det ikke gør dette i Python. Hvis du vil søge efter noget i en databasetabel, er den langt hurtigste og mest effektive måde at gøre det i SQL. Glem ikke at bruge bindingsvariabler .

Forudsat at du har et markørobjekt curs det kan se nogenlunde sådan ud (forudsat at din tabel er unik på 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

Så hvis du leder efter noget, der ikke eksisterer, får du følgende.

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

Den egentlige grund til, at du ikke får, hvad du forventer, er, at cx_Oracle returnerer en liste over tupler i henhold til PEP 249 . Du forventer, at kun én kolonne returneres, så du skal have adgang til 0-indekset for tuplen, hvis du vil gøre det på den måde, du er.

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



  1. Skal fjerne Oracle Favicon

  2. Hentning af min() for en count(*) kolonne

  3. Installation af MySQLdb specifikt i python 2.7 på centos

  4. Tjek om der findes en række eller ej i postgresql