不要在Python中這樣做。如果您想在數據庫表中搜索某些內容,最快和最有效的方法是在SQL中執行此操作。不要忘記使用bind variables。
假設你有一個遊標對象curs
它可能看起來像這樣(假設你的表在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
然後,如果你正在尋找不存在的東西,你會得到以下。
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
實際的原因你沒有得到你所期望的是,cx_Oracle返回元組按照PEP 249的列表。您只希望返回一列,因此您需要訪問元組索引,如果您想按照您的方式進行操作,那麼您需要訪問元組的索引。
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes
來源
2013-03-06 08:31:45
Ben