SQLAlchemy ORM – Creación de sesión

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:

Ejemplo 1 Salida

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *