Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tìm kiếm tên trong cx_Oracle

Đừ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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham số Boolean cho thủ tục lưu trữ Oracle

  2. java.lang.UnsupportedOperationException:org.hibernate.dialect.Oracle10gDialect không hỗ trợ tập kết quả thông qua các thủ tục được lưu trữ

  3. Mã hóa mật khẩu trong R - để kết nối với Oracle DB bằng RODBC

  4. Cách tốt hơn để cấu trúc câu lệnh PL / SQL IF THEN?

  5. Truy vấn SQL để chuyển đổi biểu thức cron sang định dạng ngày / giờ