En este artículo, veremos cómo crear una sesión para consultas SQLAlchemy ORM.
Antes de comenzar, instalemos las dependencias requeridas usando pip:
pip install sqlalchemy
Como vamos a usar MySQL en esta publicación, también instalaremos un conector SQL para MySQL en Python. Sin embargo, ninguna de las implementaciones de código cambia con el cambio en la base de datos, excepto los conectores SQL.
pip install pymysql
Sesión en SQLAlchemy ORM
La sesión establece todas las conversaciones con la base de datos. La sesión es una clase normal de Python que se puede instanciar directamente. Sin embargo, para estandarizar cómo se configuran y adquieren las sesiones, la clase sessionmaker se usa normalmente para crear una configuración de sesión de nivel superior que luego se puede usar en toda una aplicación sin la necesidad de repetir los argumentos de configuración.
Sintaxis: sqlalchemy.orm.session.sessionmaker(bind=Ninguno, **kwargs)
Parámetros:
- bind: objeto sqlalchemy.engine.Engine que especifica la base de datos para realizar conversaciones.
Ejemplo 1: crear una clase de sesión configurada
Python
import sqlalchemy as db from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() # DEFINE THE ENGINE (CONNECTION OBJECT) engine = db.create_engine("mysql+pymysql://root:password@\ localhost/Geeks4Geeks") # CREATE THE TABLE MODEL TO USE IT FOR QUERYING class Students(Base): __tablename__ = 'students' first_name = db.Column(db.String(50), primary_key=True) last_name = db.Column(db.String(50), primary_key=True) course = db.Column(db.String(50)) score = db.Column(db.Float) # CREATE THE SESSION OBJECT from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() # TESTING OUR SESSION OBJECT result = session.query(Students).all() for r in result: print(r.first_name, r.last_name)
Producción:
Para todos los ejemplos, creamos un objeto de motor obligatorio para que podamos vincular el motor con la sesión. En este ejemplo, hemos creado un objeto de sesión configurado. El motor se define en el momento de la llamada del creador de la sesión. Sin embargo, hay otras formas en que podemos hacerlo según nuestros requisitos. El código usa una tabla de demostración para estudiantes que tiene 4 campos y 6 registros como se ve en el código y la salida.
Ejemplo 2: Agregar configuraciones a sessionmaker() existente
Python
import sqlalchemy as db # DEFINE THE ENGINE (CONNECTION OBJECT) engine = db.create_engine("mysql+pymysql:/\ /root:password@localhost/Geeks4Geeks") # CREATE THE SESSION OBJECT from sqlalchemy.orm import sessionmaker Session = sessionmaker() # session is configured later Session.configure(bind=engine) session = Session()
En el ejemplo 2, el creador de sesiones crea un objeto de sesión. Este objeto de sesión se configura posteriormente como podemos ver en el programa. Este método de configuración es útil especialmente cuando queremos usar varias instancias de bases de datos o si el objeto del motor se define en una etapa posterior del programa.
Ejemplo 3: uso de varias sesiones en SQLAlchemy
Python
import sqlalchemy as db from sqlalchemy.orm import sessionmaker # DEFINE THE ENGINE FOR DATABASE 1 engine_1 = db.create_engine("mysql+pymysql://\ root:password@localhost/Geeks4Geeks") # DEFINE THE ENGINE FOR DATABASE 2 engine_2 = db.create_engine("mysql+pymysql://\ root:password@localhost/Geeks4Geeks2") # CREATING A CONFIGURED SESSION # CLASS FOR DATABASE 1 Session_1 = sessionmaker(bind=engine_1) session_1 = Session_1() # CREATING A SESSION CLASS FOR DATABASE # 2 AND CONFIGURING IT LATER Session_2 = sessionmaker() Session_2.configure(bind=engine_2) session_2 = Session_2()
En el tercer ejemplo, hemos creado 2 sesiones diferentes utilizando el método sessionmaker() . Ambas sesiones apuntan a diferentes conexiones de base de datos. En casos de uso como la conexión maestro-esclavo o la arquitectura de múltiples bases de datos, esto resultará muy útil.
Publicación traducida automáticamente
Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA