-
-
Save RumiSantins/65aa3600c0de832e8f0c5014b201d361 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment