Saltar al contenido

SQLAlchemy a través de Paramiko SSH

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 es postgres)
  • 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *