¿Cómo contar filas con SELECT COUNT (*) con SQLAlchemy?

En este artículo, veremos cómo seleccionar el conteo de filas usando SQLAlchemy en Python.

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

Usaremos la base de datos sakila de muestra de mySQL. En este artículo, cubriremos 2 ejemplos, uno para las capas SQLAchemy Core y ORM. En ambos ejemplos, contaremos el número de registros presentes en la tabla de actores dentro de la base de datos sakila . Si no tiene la base de datos sakila y desea seguir este artículo sin instalarlo, use el script SQL presente en el enlace que se menciona a continuación para crear el esquema requerido y la tabla de actores junto con los registros. Guión de mesa de actor Sakila

La consulta SQL que estamos viendo en los dos ejemplos siguientes es:

SELECT COUNT(*) FROM sakila.`actor`;

Núcleo de SQLAlchemy

SQLAlchemy Core es un modelo centrado en el esquema que significa que todo se trata como parte de la base de datos, es decir, filas, columnas, tablas, etc. En el ejemplo anterior, hemos creado el objeto de metadatos para acceder a los objetos de la base de datos como la tabla. Usando este objeto obtenemos los metadatos de la tabla de actores. Esta información de metadatos se usa luego para consultar la tabla usando la sintaxis de SQLAlchemy que se menciona a continuación.

Sintaxis: sqlalchemy.select([sqlalchemy.func.count()]).select_from(sqlalchemy.DeclarativeMeta).scalar()

Python

import sqlalchemy as db
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@localhost/sakila")
 
# CREATE THE METADATA OBJECT TO ACCESS THE TABLE
meta_data = db.MetaData(bind=engine)
db.MetaData.reflect(meta_data)
 
# GET THE `actor` TABLE FROM THE METADATA OBJECT
actor_table = meta_data.tables['actor']
 
# SELECT COUNT(*) FROM Actor
result = db.select([db.func.count()]).select_from(actor_table).scalar()
 
print("Count:", result)

Producción:

Count: 200

SQLAlchemy ORM

SQLAlchemy Core utiliza una vista centrada en objetos que encapsula el esquema con objetos comerciales. Es una implementación más pythonica ya que podemos ver las tablas representadas en el formato de clase. Hemos usado este objeto de clase para consultar la tabla de actores usando la sintaxis de SQLAlchemy que se menciona a continuación.

Sintaxis: sqlalchemy.orm.Session.query(sqlalchemy.DeclarativeMeta).count()

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/sakila")
 
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Actor(Base):
 
    __tablename__ = 'actor'
 
    actor_id    = db.Column(db.SmallInteger,
                            primary_key=True,
                            autoincrement=True)
    first_name  = db.Column(db.String(45))
    last_name   = db.Column(db.String(45))
    last_update = db.Column(db.DateTime)
    city        = db.Column(db.String(20))
 
# CREATE A SESSION OBJECT TO INITIATE QUERY IN DATABASE
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
 
# SELECT COUNT(*) FROM Actor
result = session.query(Actor).count()
 
print("Count:", result)

Producción:

Count: 200

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 *