Skip to content

Instantly share code, notes, and snippets.

@RumiSantins
Created July 4, 2020 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RumiSantins/65aa3600c0de832e8f0c5014b201d361 to your computer and use it in GitHub Desktop.
Save RumiSantins/65aa3600c0de832e8f0c5014b201d361 to your computer and use it in GitHub Desktop.
#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