/ Python

Python - SQLAlchemy y sus sesiones

¡Hola! Esta vez veremos como usar SQLAlchemy y sus sesiones para conectarse con la DB MySQL.

Para esto dejaremos un gist que nos ayudará a entender de forma práctica:

#librerías necesarias para utilizar el sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
 
#variable engine global
ENGINE = None
 
#La función conexión, sirve para crear una conexión maestra a partir de engine(cadena de conexión) que recibe credenciales
def createConnectionDB(confdict):
    #Este es el global engine, por el momento se usa para abastecer al ENGINE global que se usará al momento de obtener los modelos de la DB
    global ENGINE
    #Se crea el engine para poder crear la conexión maestra
    engine = create_engine("mysql+pymysql://"+conf['user']+":"+conf['pass']+"@"+conf['host']+":"+conf['port']+"/"+conf['dbname'],pool_size=3000max_overflow=-1)
    #Con el engine creado se abastece el ENGINE global
    ENGINE = engine
    #Usando la función sessionmaker y como parámetro el engine se crea un session_factory
    session_factory = sessionmaker(bind=engine)
    #Usando el scoped_session y como parámetro el session_factory se crea la conexión maestra
    #la conexión maestra se declara como capital porque se puede invocar como función y utilizar como tal
    Session = scoped_session(session_factory)
    return Session
 
#Diccionario de credenciales para la DB
#Este diccionario servirá para poder pasar las credenciales al engine de la función createConnectionDB
CONF_DATABASE = {"user":"",
                 "pass":"",
                 "host":"",
                 "port":"",
                 "dbname":""
}
#creamos la conexión maestra a la DB utilizando como parámetro el diccionario de credenciales
Session = createConnectionDB(CONF_DATABASE)
#Con esta conexión maestra podemos utilizarla y crear más conexiones a partir de esta
Session.query() #se corrobora que podemos llamar el método query que es particular de las conexiones
#Verificamos el tipo de conexión
print(f"Sessión padre -> {Session}"#Imprimirá scoped
 
#Creamos una conexión hijo a partir de la conexión maestra
session_child = Session()
#Con esta conexión no se pueden crear más conexiones sería una violación
session_child.query() #se corrobora que podemos llamar el método query que es particular de las conexiones
print(f"Sessión hijo ->", {session_child}) #Imprimirá session