2010-01-09 34 views
13

Trong cx_Oracle (hoặc Oracle nói chung), có thể phân bổ con trỏ cho mỗi truy vấn hoặc sử dụng lại con trỏ trên một số truy vấn.Sự cân bằng giữa việc sử dụng lại con trỏ và tạo con trỏ mới là gì?

def getSomeData(curs):   # case 1: pass in a cursor, which is generally 
    curs.execute('select ...') #   reused across queries 
    return curs.fetchall() 

def getSomeData(conn):   # case 2: pass in a connection,allocate 
    curs=conn.cursor()   #   a cursor for this query 
    curs.execute('select ...') 
    return curs.fetchall() 

Tất nhiên, cả hai phương thức đều trả về cùng một dữ liệu.

Sự cân bằng giữa hai cách tiếp cận là gì? Là một trong những đặc biệt nhiều hơn hoặc ít hiệu quả? Có bất kỳ cạm bẫy tiềm năng nào để sử dụng lại con trỏ trên nhiều truy vấn không?

Trả lời

9

Bạn có thể sử dụng lại con trỏ cx_Oracle nhiều như bạn muốn, không vấn đề gì. Nếu bạn đang thực hiện hàng nghìn truy vấn nhỏ trong một khoảng thời gian nhỏ, bạn có thể sẽ thấy cải thiện hiệu suất nhỏ bằng cách sử dụng lại con trỏ, nhưng tôi nghi ngờ điều đó.

Đôi khi tôi sẽ tạo các con trỏ mới và các lần khác sử dụng lại con trỏ hiện có, tùy thuộc vào việc nó làm cho mã dễ đọc và dễ hiểu hơn.

Ví dụ: nếu tôi có nhiều quy trình cần truy cập cơ sở dữ liệu, tôi có thể truyền đối tượng kết nối Oracle xung quanh hoặc con trỏ được tạo trên kết nối đó.

Điều gì làm cho mã của bạn dễ đọc hơn và dễ bảo trì hơn là những gì tôi muốn.

Các vấn đề liên quan