Đừng làm điều này bằng Python. Nếu bạn muốn tìm kiếm thứ gì đó trong bảng cơ sở dữ liệu, cách nhanh nhất và hiệu quả nhất là thực hiện trong SQL. Đừng quên sử dụng biến ràng buộc .
Giả sử bạn có một đối tượng con trỏ curs
nó có thể trông giống như thế này (giả sử bảng của bạn là duy nhất trên 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
Sau đó, nếu bạn đang tìm kiếm thứ gì đó không tồn tại, bạn sẽ nhận được những thứ sau.
>>> bind_variables = {'var' : 'other'}
>>> results = curs.fetchall()
>>> results
[]
>>> try:
... var = results[0][0]
... print ('Yes')
... except IndexError:
... print ('No')
...
No
Lý do thực tế khiến bạn không nhận được những gì mình mong đợi là cx_Oracle trả về một danh sách các bộ giá trị theo PEP 249 . Bạn đang mong đợi chỉ một cột được trả về, vì vậy bạn cần truy cập vào chỉ mục 0 của bộ tuple, nếu bạn muốn thực hiện điều đó theo cách của bạn.
>>> rows = [('other',),('smth',)]
>>> var = 'smth'
>>> for row in rows:
... if var == row[0]:
... print ('Yes')
...
Yes