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(conf: dict): | |
| #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=3000, max_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 |