使用 sqlalchemy 查询远程数据库后,SSHTunnelForwarder 未结束
SSHTunnelForwarder not ending after querying remote database with sqlalchemy
通过 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!' 但服务器不会停止,当我评论查询行时它确实完成了。
您没有关闭会话,因此连接不会返回到引擎持有的池中,因此处理不会处理它。
Ilja 在这个问题上为我指明了正确的方向,在处理引擎之前添加了 session.close() 并且运行良好
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])
session.close()
engine.dispose()
print('it gets here')
server.stop()
print('Finished!')
通过 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!' 但服务器不会停止,当我评论查询行时它确实完成了。
您没有关闭会话,因此连接不会返回到引擎持有的池中,因此处理不会处理它。
Ilja 在这个问题上为我指明了正确的方向,在处理引擎之前添加了 session.close() 并且运行良好
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])
session.close()
engine.dispose()
print('it gets here')
server.stop()
print('Finished!')