sql >> Databasteknik >  >> RDS >> Oracle

Sök efter namn i cx_Oracle

Gör inte gör detta i Python. Om du vill söka efter något i en databastabell är det överlägset snabbaste och mest effektiva sättet att göra det i SQL. Glöm inte att använda bindningsvariabler .

Förutsatt att du har ett markörobjekt curs det kan se ut ungefär så här (förutsatt att din tabell är 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

Om du sedan letar efter något som inte finns får du följande.

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

Den faktiska anledningen till att du inte får vad du förväntar dig är att cx_Oracle returnerar en lista med tupler enligt PEP 249 . Du förväntar dig att endast en kolumn ska returneras så du behöver tillgång till 0-indexet för tupeln om du vill göra det på det sätt du gör.

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



  1. hur letar man efter användardefinierade tabeller i postgres?

  2. FEL:array får inte innehålla nulls PostgreSQL

  3. Transaktionsloggövervakning

  4. hur man bara beräknar dagar mellan två datum i postgres sql-frågan.