Мне нужен доступ к базе данных Mysql на удаленном сервере, но я должен использовать туннель ssh. Без Python я могу получить доступ к БД с помощью клиента управления sql. С кодом Python я использую sqlalchemy и sshtunnel. sshtunnel должен работать, но я не могу получить какие-либо данные, используя read_sql. Вот скрипт, который я использовал:
from sqlalchemy import create_engine
import sshtunnel
import pandas as pd
with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_pkey =private_key,
remote_bind_address=(mysql_host, mysql_port)
) as server:
print('Server connected via SSH')
local_port = str(server.local_bind_port)
engine = create_engine('mysql+mysqlconnector://{}:{}@{}:{}/my_db'.format(mysql_user, mysql_password, '127.0.0.1', local_port), echo=True)
query = 'select count(*) from asset'
data = pd.read_sql(query, engine)
Он работает и не остановится. На самом деле я только получаю некоторую информацию, но я не знаю, что значит и что я должен делать, чтобы получить правильные данные.
Вот возвращаемая информация:
Server connected via SSH
2019-03-24 22:42:47,316 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2019-03-24 22:42:47,317 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:47,637 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
2019-03-24 22:42:47,638 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:48,587 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2019-03-24 22:42:48,587 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:49,239 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2019-03-24 22:42:49,240 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:49,571 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2019-03-24 22:42:49,572 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:50,022 INFO sqlalchemy.engine.base.Engine DESCRIBE `select count(*) from asset`
2019-03-24 22:42:50,023 INFO sqlalchemy.engine.base.Engine {}
2019-03-24 22:42:50,144 INFO sqlalchemy.engine.base.Engine ROLLBACK
2019-03-24 22:42:50,582 INFO sqlalchemy.engine.base.Engine select count(*) from asset
2019-03-24 22:42:50,583 INFO sqlalchemy.engine.base.Engine {}