2009-12-29 6 views
0

MySQL 데이터베이스 쿼리를 통해 서비스를 제공하는 서버를 작성하고 있습니다. 1 ~ 2 일 동안 연결을 끊을 때를 제외하고 모든 것이 잘됩니다.MySQLdb 연결 문제

내가으로 커서 객체를 포장하려고 (2600, MySQL이 멀리 간) 오류 코드입니다 :이 작동하지 않을 것 같다

def cursor(self):  
    try: 
     return self.connection.cursor() 
    except: 
     self.connection = MySQLdb.connect(**self.kwargs) 
     return self.connection.cursor() 

, 나는 아직도이 래퍼 클래스에서 나는 동안 커서를 오류가 발생했습니다 cursor.execute (..)를 호출 할 때.

내가 일관성있는 연결을 유지할 수 있습니다 어떤 생각?

당신은 더 나은 연결 풀에서 제공하고 연결이 열려있는 시간의 길이를 최소화하는 것

답변

2

연결이 열려 너무 오래 유지하지에 대한 duffymo의 아이디어는 실행 가능하지만, 그래서 (내가 하나가 더있는에 대해 너무 확실하지 않다)을 제외하고 재 시도를 잡기 대한 원래의 아이디어입니다 @.

예외는 cursor.execute에 의해 발생하므로 여기에서 연결 및 커서를 갱신하고 실행 시도를 반복하여이를 찾아서 해결해야합니다. 간단한 클래스 래퍼를 통해 연결 및 매개 변수를 설정하거나 다시 설정하는 데 필요한 매개 변수와 커서를 멤버로 사용하고 실행 및 가져 오기를위한 메서드를 노출합니다.

그런 식으로 연결 및 커서를 캡슐화함으로써, 사용자가 일 경우을 수행 할 때 완전히 동일한 구현을 유지할 수 있습니다 (풀과의 연결을 가져 와서 연결을 완료하는 완전히 다른 구현) @ duffymo의 전략으로 전환 할 수 있습니다 (명시 적 방법 인 "execute에서 가져 오기"가 도움이 될 것입니다 ;-).

+0

감사합니다. 좋은 생각. –

1

. 더 확장 성이 좋을 것이며이 문제로 어려움을 겪지 않을 것입니다.