2011-01-10 5 views
6

Chúng tôi có một máy chủ cơ sở dữ liệu hơi không đáng tin cậy, vì nhiều lý do, và kết quả là đôi khi các kết nối cơ sở dữ liệu được ứng dụng của tôi sử dụng biến mất từ ​​bên dưới nó. Các kết nối là các kết nối SQLAlchemy 0.6.5 tới một db PostgreSQL trong một thời gian chạy trên web Pylons 1.0.Tôi làm cách nào để kiểm tra các kết nối được gộp trong SQLAlchemy trước khi giao cho mã ứng dụng của tôi?

Điều tôi muốn là một số cách để bắt được hầu hết các số trong số này mà không có lỗi hiển thị của người dùng; lý tưởng, tôi sẽ kiểm tra kết nối ở cấp độ hồ bơi trước khi trả lại nó từ động cơ. Tôi kiểm soát việc tạo ra động cơ, vì vậy tôi không sao.

Cách tốt nhất (hầu hết không cần thiết/sạch sẽ nhất) để thực hiện việc này là gì? Tôi nhận ra rằng sẽ luôn luôn có khả năng kết nối chết giữa séc và cách sử dụng, nhưng điều đó sẽ khá hiếm trong môi trường này, và do đó không phải là mối quan tâm với tôi.

Trả lời

4

Bạn có thể sử dụng một người biết lắng nghe hồ bơi:

class ConnectionChecker(sqlalchemy.interfaces.PoolListener): 
    def checkout(self, dbapi_con, con_record, con_proxy): 
     if not is_valid_connection(dbapi_con): 
      # a new connection will be used 
      raise sqlalchemy.exc.DisconnectionError 

Left cho bạn là làm thế nào để thực hiện is_valid_connection đối với trường hợp sử dụng của bạn.