2016-10-30 6 views
0

내 데이터베이스에 액세스하기 위해 sshtunnel을 만들려고합니다. SQLalchemy 및 pandas 함께 sshtunnel 패키지를 사용하고 있습니다.함수에서 sshtunnel이 작동하지 않습니다.

예 1

# run in terminal 
ssh -L 5433:127.0.0.1:5432 [ssh_config]  

# run in iPython 
pd.read_sql_query(query, conn) 

내 터미널에 SSH 터널을 만든 다음 팬더와 쿼리를 (위의 예를 참조)를 실행, 그것을 잘 작동하고 DataFrame이 반환됩니다.

나는 터널을 만든 다음 그 상황에서 연결을 생성 예 2, 그것은 작동하지 않습니다.

with SSHTunnelForwarder(
    os.environ['SSH_ADDRESS'], 
    ssh_username=os.environ['SSH_USER'], 
    ssh_pkey=os.environ['SSH_PKEY'], 
    remote_bind_address=('127.0.0.1', 5432), 
    local_bind_address=('0.0.0.0', 5433) 
) as sshserver: 
    conn = self.engine.connect() 
    pd.read_sql_query(query, conn) 
    conn.close() 
    sshserver.stop() 

오류 메시지는 다음과 같습니다

OperationalError: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected 
[SQL: '\nselect \nid\n\nfrom \nclean.accounts \n\nlimit 10\n'] 

진짜로 흥미로운 것은입니다이 문제를 '대체'. 이것은 한 번 실행하면 오류 메시지가 발생한다는 것을 의미합니다. 그러나 함수를 다시 실행하면 Dataframe이 반환됩니다. 세 번 실행 해보면 오류 메시지가 다시 나타납니다. 이것은 명령을 실행할 때마다 무기한 진행됩니다.

누구에게 어떤 문제가 있습니까?

답변

0

마지막 줄에서 sshserver.stop()을 제거하면 도움이 될 것 같습니다. with 함수를 사용하여 파일 또는 서버 연결을 처리 할 때; 그것은 자체적으로 파일이나 연결을 닫는 &을 처리합니다. 명시 적으로 연결을 닫을 필요는 없습니다.

자세한 설명 here

관련 문제