通过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!”但是服务器不会停止,当我注释查询行时它确实完成了。
答案 0 :(得分:0)
您不会关闭会话,因此连接不会返回到引擎所拥有的池中,因此dispose不会对其进行处理。
答案 1 :(得分:0)
Ilja在这个问题上为我指明了正确的方向,在部署引擎之前添加了session.close(),效果很好
onclick