用sqlalchemy查询远程数据库后SSHTunnelForwarder没有结束

时间:2019-07-18 15:37:27

标签: python sqlalchemy ssh-tunnel

通过sshtunnelforwarder成功连接到远程mysql数据库并在sqlalchemy的帮助下执行查询之后,sshtunnelforwarder服务器不会停止。

我在运行查询后尝试使用engine.dispose()来查看它是否完成,但是没有完成。仅在不处理任何查询并使用engine.dispose()时才会停止

from sshtunnel import SSHTunnelForwarder
from sqlalchemy.orm import Session
from sqlalchemy import create_engine

server = SSHTunnelForwarder(
    (remote_ip, 22),
    ssh_username="sshuser",
    ssh_password="sshpwd",
    remote_bind_address=('127.0.0.1', 3306),
    local_bind_address=('127.0.0.1','3307')
)
server.start()

engine = create_engine('mysql://dbuser:dbpwd@127.0.0.1:3307/dbname')
session = Session(engine)

rs = session.execute('select count(distinct col1) from table1')
for r in rs:
    print(r[0])

print('it gets here')
engine.dispose()
server.stop()
print('Finished!')

我希望代码完成并显示“ Finsihed!”但是服务器不会停止,当我注释查询行时它确实完成了。

2 个答案:

答案 0 :(得分:0)

您不会关闭会话,因此连接不会返回到引擎所拥有的池中,因此dispose不会对其进行处理。

答案 1 :(得分:0)

Ilja在这个问题上为我指明了正确的方向,在部署引擎之前添加了session.close(),效果很好

onclick