Este escrito fue aprobado por especialistas para que tengas la seguridad de la exactitud de este ensayo.
Solución:
Por si hay alguien que le interese conectarse a un remoto postgresql base de datos a través de SSH y quiere cargar datos en un Marco de datos de pandas Aquí está cómo hacerlo.
Supongamos que hemos instalado una base de datos postgresql en un servidor remoto, a la que podemos hacer ssh mediante los siguientes parámetros.
Parámetros SSH:
- IP del servidor:
10.0.0.101
- Puerto SSH:
22
(puerto predeterminado para SSH) - Nombre de usuario:
my_username
- Clave:
my_password
Parámetros de la base de datos:
- Puerto:
5432
(puerto predeterminado postgresql) - Nombre de la base de datos:
db
- Usuario de la base de datos:
postgres_user
(el nombre de usuario predeterminado espostgres
) - Contraseña de la base de datos:
postgres_pswd
(la contraseña predeterminada es un vacío string) - Tabla con nuestros datos:
MY_TABLE
Ahora, queremos conectarnos a esta base de datos de nuestro lado y cargar datos en un DataFrame de pandas:
from sshtunnel import SSHTunnelForwarder
from sqlalchemy import create_engine
import pandas as pd
server = SSHTunnelForwarder(
('10.0.0.101', 22),
ssh_username="my_username",
ssh_password="my_password",
remote_bind_address=('127.0.0.1', 5432)
)
server.start()
local_port = str(server.local_bind_port)
engine = create_engine('postgresql://:@:/'.format("postgres_user", "postgres_pswd", "127.0.0.1", local_port, "db"))
dataDF = pd.read_sql("SELECT * FROM "";".format("MY_TABLE"), engine)
server.stop()
La forma más fácil de hacer esto sería ejecutar un túnel SSH al puerto mysql en el host remoto. Por ejemplo:
ssh -f [email protected] -L 3307:mysql1.example.com:3306 -N
Luego conéctese localmente con SQLAlchemy:
engine = create_engine("mysql://username_sql:[email protected]:3307/dbb")
Si realmente quiere usar paramiko, pruebe este código de demostración en el repositorio de paramiko o en el módulo sshtunnel. los ssh
Sin embargo, el comando podría ser el método más fácil … y puede usar autossh para reiniciar el túnel si falla.
Puede usar la biblioteca SSHTunnel de la siguiente manera:
from sshtunnel import SSHTunnelForwarder #Run pip install sshtunnel
from sqlalchemy.orm import sessionmaker #Run pip install sqlalchemy
with SSHTunnelForwarder(
('10.160.1.24', 22), #Remote server IP and SSH port
ssh_username = "",
ssh_password = "",
remote_bind_address=('127.0.0.1', 5432)
) as server:
server.start() #start ssh sever
print 'Server connected via SSH'
#connect to PostgreSQL
local_port = str(server.local_bind_port)
engine = create_engine('postgresql://:@127.0.0.1:' + local_port +'/')
Session = sessionmaker(bind=engine)
session = Session()
print 'Database session created'
#test data retrieval
test = session.execute("SELECT * FROM ")
Si conservas alguna suspicacia o forma de mejorar nuestro post eres capaz de ejecutar un exégesis y con deseo lo observaremos.