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

psycopg2:con trỏ đã đóng

Có lẽ nếu kết nối bị ngắt, bạn sẽ cần thiết lập lại nó và lấy một con trỏ khác trong trình xử lý ngoại lệ:

for query in queries:
    try:
        cursor.execute(query)
    except Exception as e:
        print e.message
        conn = psycopg2.connect(....)
        cursor = conn.cursor()

Bạn nên cụ thể hơn với các trường hợp ngoại lệ mà bạn bắt được. Giả sử một InterfaceError ngoại lệ nếu con trỏ bị đóng bằng cách nào đó, bạn có thể thấy như thế này:

except psycopg2.InterfaceError as e:

Có thể có các vấn đề khác ít nghiêm trọng hơn sẽ ngăn không cho các truy vấn tiếp theo thực thi, ví dụ:giao dịch bị hủy bỏ. Trong trường hợp đó, bạn cần khôi phục giao dịch hiện tại và sau đó thử truy vấn tiếp theo:

queries = ['select count(*) from non_existent_table', 'select count(*) from existing_table']
for query in queries:
    try:
        cursor.execute(query)
    except psycopg2.ProgrammingError as exc:
        print exc.message
        conn.rollback()
    except psycopg2.InterfaceError as exc:
        print exc.message
        conn = psycopg2.connect(....)
        cursor = conn.cursor()

Ở đây, một truy vấn được thử đối với một bảng không tồn tại. A ProgrammingError ngoại lệ được đưa ra và kết nối phải được khôi phục nếu muốn thực hiện một truy vấn khác. Truy vấn thứ hai sẽ thành công.

Điều này làm sáng tỏ các chi tiết của các ngoại lệ khác được nêu ra trong chính các trình xử lý ngoại lệ, ví dụ:connect(...) có thể không thành công khi cố gắng thiết lập lại kết nối, vì vậy bạn cũng nên xử lý điề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. PostgreSQL ilike với nhiều kết quả phù hợp trong Rails ActiveRecord

  2. Theo dõi dấu thời gian sửa đổi cuối cùng của một hàng trong Postgres

  3. Tạo bảng Postgresql từ Sơ đồ Avro trong Nifi

  4. Cơ sở dữ liệu mặc định có tên là postgres trên máy chủ Postgresql

  5. Postgres CHỌN * TỪ bảng WHERE column-varchar ==string-example?