データベースにアクセスするための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トンネルを作成し、(上記の例を参照)パンダにクエリを実行すると、それが正常に動作し、データフレームが返されます。
例2
Iがトンネルを作成し、そのコンテキスト内の接続を生成するとき、それは動作しません。
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が返されます。 3回目の実行を試みると、エラーメッセージが再度表示されます。これはコマンドを実行するたびに無期限に続きます。
問題は何ですか?