2013-03-06 72 views
0

我有var='smth',我需要檢查是否存在於表「的smtb」搜索名稱cx_Oracle

我試過的東西這個var,但它不工作:

rows=curs.fetchall() 
for row in rows: 
      if var==row: 
       print("Yes") 

當我打印行的元素,我得到一些這樣的模式:

('element',) 

如何檢查是否var表中存在?

回答

2

不要在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