sql >> Databáze >  >> RDS >> Oracle

Vyhledejte jméno v cx_Oracle

Ne udělejte to v Pythonu. Pokud chcete něco hledat v databázové tabulce zdaleka nejrychlejším a nejefektivnějším způsobem, je to udělat v SQL. Nezapomeňte použít spojit proměnné .

Za předpokladu, že máte objekt kurzoru curs může to vypadat nějak takto (za předpokladu, že vaše tabulka je jedinečná na 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

Pokud pak hledáte něco, co neexistuje, dostanete následující.

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

Skutečným důvodem, proč nedostáváte to, co očekáváte, je to, že cx_Oracle vrací seznam n-tic podle PEP 249 . Očekáváte, že bude vrácen pouze jeden sloupec, takže potřebujete přístup k indexu 0 n-tice, pokud to chcete udělat tak, jak jste.

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



  1. Jak funguje ORIGINAL_DB_NAME() na serveru SQL Server

  2. Firebase:Jak číst z externí DB?

  3. Mezisoučty a SQL

  4. Jak najít hranice skupin souvislých pořadových čísel?