使用 SSH 将 Pandas 数据帧写入 MYSQL 数据库
Write Pandas Dataframe to MYSQL database with SSH
问题
我想使用 pandas to_sql 将数据帧写入 MYSQL table。 但是,我的连接需要 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 文件,然后将其导入数据库。如果您知道如何在 SSH 中使用 to_sql 之类的东西,请告诉我。
我最终使用了 local port forwarding
解决这个问题。
这是我在终端中用于本地端口转发的:
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')
问题
我想使用 pandas to_sql 将数据帧写入 MYSQL table。 但是,我的连接需要 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 文件,然后将其导入数据库。如果您知道如何在 SSH 中使用 to_sql 之类的东西,请告诉我。
我最终使用了 local port forwarding 解决这个问题。
这是我在终端中用于本地端口转发的:
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')