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

Cách sử dụng con trỏ phía máy chủ với psycopg2

Psycopg2 có một giao diện đẹp để làm việc với các con trỏ phía máy chủ. Đây là một mẫu có thể sử dụng:

with psycopg2.connect(database_connection_string) as conn:
    with conn.cursor(name='name_of_cursor') as cursor:

        cursor.itersize = 20000

        query = "SELECT * FROM ..."
        cursor.execute(query)

        for row in cursor:
            # process row 

Đoạn mã trên tạo kết nối và tự động đặt kết quả truy vấn vào con trỏ phía máy chủ. Giá trị itersize đặt số hàng mà máy khách sẽ kéo xuống tại một thời điểm từ con trỏ phía máy chủ. Giá trị bạn sử dụng phải cân bằng giữa số lượng cuộc gọi mạng và sử dụng bộ nhớ trên máy khách. Ví dụ:nếu số kết quả của bạn là ba triệu, một itersize giá trị 2000 (giá trị mặc định) sẽ dẫn đến 1500 cuộc gọi mạng. Nếu bộ nhớ được tiêu thụ bởi 2000 hàng là nhẹ, hãy tăng con số đó.

Khi sử dụng for row in cursor tất nhiên bạn đang làm việc với từng hàng một, nhưng Psycopg2 sẽ tìm nạp trước itersize hàng tại một thời điểm cho bạn.

Nếu bạn muốn sử dụng fetchmany vì lý do nào đó, bạn có thể làm điều gì đó như sau:

while True:
    rows = cursor.fetchmany(100)
    if len(rows) > 0:
        for row in rows:
            # process row
    else:
        break

Việc sử dụng fetchmany này sẽ không kích hoạt cuộc gọi mạng tới máy chủ cho nhiều hàng hơn cho đến khi hết lô tìm nạp trước. (Đây là một ví dụ phức tạp không cung cấp gì qua đoạn mã trên, nhưng trình bày cách sử dụng fetchmany nếu có nhu cầu.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sắp xếp tự nhiên hỗ trợ các số lớn

  2. Chèn mục mới vào cột JSONB dựa trên giá trị của trường khác - postgres

  3. Làm thế nào để tạo một chỉ mục duy nhất với điều kiện và truy vấn con trong PostgreSQL?

  4. Postgres enum trong TypeORM

  5. không hiểu json_agg trong ngữ cảnh này