Python 使用SSH将Dataframe写入MYSQL数据库 问题

Python 使用SSH将Dataframe写入MYSQL数据库 问题,python,mysql,pandas,dataframe,pandas-to-sql,Python,Mysql,Pandas,Dataframe,Pandas To Sql,我想使用pandas将数据帧写入MYSQL表但是,我的连接需要SSH 我试过的 我成功地连接到pymysql执行查询,但是能够直接使用类似于to_sql的函数将使我的生活更加轻松,能够像那样直接推送数据。请参阅下面我正在使用的代码 from sshtunnel import SSHTunnelForwarder import pymysql as db import pandas as pd import numpy as np host = 'host' localhost = 'local

我想使用pandas将数据帧写入MYSQL表但是,我的连接需要SSH

我试过的 我成功地连接到pymysql执行查询,但是能够直接使用类似于to_sql的函数将使我的生活更加轻松,能够像那样直接推送数据。请参阅下面我正在使用的代码

from sshtunnel import SSHTunnelForwarder
import pymysql as db
import pandas as pd
import numpy as np

host = 'host'
localhost = 'localhost'
ssh_username = 'ssh_username'
private_key = '/path/'

# database variables
user='user'
password='password'
database='database'

#query function that works for pulling from database
def query(q):
    with SSHTunnelForwarder(
        (host, 22),
        ssh_username=ssh_username,
        ssh_private_key=private_key,
        ssh_private_key_password="password",
        remote_bind_address=(localhost, port)
    ) as server:
        conn = db.connect(host=localhost,
                               port=server.local_bind_port,
                               user=user,
                               passwd=password,
                               db=database)

        return pd.read_sql_query(q, conn)

# What you need to for to_sql
 conn = db.connect(host=host,
                        port=port,
                        user=user, 
                        password=password,  
                        db=database)

# test df
np.random.seed(0)
number_of_samples = 10
frame = pd.DataFrame({
'feature1': np.random.random(number_of_samples),
'feature2': np.random.random(number_of_samples),
'class':    np.random.binomial(2, 0.1, size=number_of_samples),
},columns=['feature1','feature2','class'])

# to_sql
frame.to_sql(con=conn, name='test_table', if_exists='replace', flavor='mysql')
也许是别的什么? 我正在考虑将数据帧转换为CSV文件,然后将其导入数据库。请让我知道,如果你有任何线索如何使用类似于sql与SSH的东西

我最终使用了 解决这个问题

这是我在终端中用于本地端口转发的

ssh -N -v SSH_user@SSH_host -L3306:127.0.0.1:3306
我使用了sqlalchemy作为连接:

from sqlalchemy import create_engine

engine = create_engine("mysql://user:password@127.0.0.1:3306/db?charset=utf8"
df.to_sql(con=engine, name='test_table', if_exists='replace')

为什么您的连接需要
ssh
才能工作,您应该能够使用服务器的ip访问数据库出于安全原因,我们使用ssh。昨天我和我们的主架构师谈过,告诉我我们必须以某种方式通过SSH进行连接。然而,我正在调查或类似的工作,但我认为我们的管理员已经封锁了这一点。目前,我已经开发了一个将其转换为csv的解决方案。这不是我想要的,但它能完成任务:/