2014-07-16 7 views
1

새 시스템에서 db에 연결하는 데 문제가 있습니다. 파이썬의 버전은 같습니다. 여기가있는 DB에 대한 연결 문자열이며, 오류 메시지가 변화를 볼 수 있지만, 연결 문자열 나는 ​​다음과 같은 오류가 정확한 이유 때 내가 운동 할 수 없습니다 여기 pg8000 postgres 연결 문제 (Python에서)

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/pg8000/__init__.py", line 148, in connect 
    user, host, unix_sock, port, database, password, socket_timeout, ssl) 
    File "/usr/local/lib/python2.7/dist-packages/pg8000/core.py", line 1157, in __init__ 
    raise exc_info()[1] 
TypeError: cannot concatenate 'str' and 'int' objects 

내 연결입니다 문자열 때 올바른 :

conn = DBAPI.connect(host='sql2', user='XXX', password='XX', database='XX', socket_timeout=100, port=5432) 

내가 잘못 뭔가 변경할 때 :

conn = DBAPI.connect(host='sql2', user='XXX', password='XX', database='XX', socket_timeout=100, port=100) 

다음과 같은 오류 메시지

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/mnt/opt/Centos5.8/python-2.7.4_scipy0.13/lib/python2.7/site-packages/pg8000/__init__.py", line 148, in connect 
    user, host, unix_sock, port, database, password, socket_timeout, ssl) 
    File "/mnt/opt/Centos5.8/python-2.7.4_scipy0.13/lib/python2.7/site-packages/pg8000/core.py", line 854, in __init__ 
    raise InterfaceError("communication error", exc_info()[1]) 
pg8000.errors.InterfaceError: ('communication error', error(111, 'Connection refused')) 

이 오류 메시지의 출처를 알 수 없습니다. 나는 시도했다 :

포장 문자열 u'ss' 포트를 제거 퍼팅 str()에 추가 소켓 타임 아웃 등 등

내가 pg8000에서 core.py 코드에서 보았을 때 인증에서 오는 것으로 보인다 당신이 그것을 쫓아가는 경우 오류. 이 오류 (int 및 str)가 인증 오류를 누그러 뜨릴 수 있다고 생각합니다.

메시지 코드

AUTHENTICATION_REQUEST = B ("R")

+0

'str()'에'socket_timeout'과'port' 값을 개별적으로 래핑 해 보았습니까? – TheSoundDefense

+0

@ TheSoundDefense, socket_timeout 및 포트가 정수로 필요합니다. 포장을 시도했습니다. str (dbsettings [ 'user']), password = str (dbsettings [ 'password']), 데이터베이스 = str (dbsettings [ 'database']), 포트 = str (dbsettings [ 'host']) dbsettings [ 'port'], ssl = dbsettings [ 'ssl'] – disruptive

답변

3

이것은 bug in pg8000이다. fixed in pg8000-1.9.11입니다. 이 버그는 데이터베이스에 대해 인증을 시도하는 동안 pg8000에서 발생한 오류를보고하는 중 오류입니다.

+0

업데이트 된 코드로 변경되었으므로 적절한 오류가 발생합니다. pg8000.errors.InterfaceError : 인증 방법 3이 pg8000에서 지원되지 않습니다. – disruptive

+0

방법 3은 일반 텍스트 암호 인증입니다. 나는 pg8000이 그것을 지원해야한다고 생각한다. 그래서 https://github.com/mfenniak/pg8000/issues/52에서 기능 요청을 만들었다. –