Записать Pandas Dataframe в базу данных MYSQL с SSH - PullRequest
0 голосов
/ 24 января 2019

Проблема

Я хотел бы использовать панды to_sql для записи фрейма данных в таблицу 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 и затем импортирующийэто в базу данных .Пожалуйста, дайте мне знать, если вы знаете, как использовать что-то вроде to_sql с SSH.

1 Ответ

0 голосов
/ 06 февраля 2019

Я закончил с использованием переадресации локального порта Для решения этой проблемы.

Это то, что я использовал в терминале для переадресации локального порта:

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')
...