En este artículo, vamos a ver cómo usar GroupBy y Sum en SQLAlchemy.
Instalando SQLAlchemy
SQLAlchemy está disponible a través del paquete de instalación pip.
pip install sqlalchemy
Sin embargo, si está utilizando un matraz, puede utilizar su propia implementación de SQLAlchemy. Se puede instalar usando –
pip install flask-sqlalchemy
En los ejemplos, haremos uso de la sintaxis común.
- sqlalchemy.create_engine(URL): crea un objeto de motor que se puede usar directamente para interactuar con la base de datos o se puede pasar a un objeto de sesión para trabajar con el ORM. La forma típica de una URL de base de datos es “dialecto+controlador://nombre de usuario:contraseña@host:puerto/base de datos”
- sqlalchemy.select(*entities): la construcción principal utilizada para generar declaraciones SELECT. Las entidades suelen ser una serie de columnas para seleccionar.
- sqlalchemy.select(*entities).group_by(column_name): la construcción principal utilizada para generar instrucciones GROUP BY.
- sqlalchemy.func.sum(column_name): La función agregada SQL SUM().
- sqlalchemy.engine.execute(statement): ejecuta la declaración dada y devuelve un objeto de resultado.
Usando GroupBy y Sum en columnas
Ejemplo 1:
Antes de seguir adelante, necesitamos tener una base de datos y una tabla con la que trabajar. Para este ejemplo, estamos usando la base de datos mySQL y hemos creado una tabla de ventas . La tabla tiene 3 columnas y 9 registros como se muestra a continuación.
En la tabla anterior, usaremos la columna de la empresa para la agrupación y la agregación se realizará en la columna no_of_invoices .
Python
import sqlalchemy as db # Define the Engine (Connection Object) engine = db.create_engine( "mysql+pymysql://root:password@localhost/Geeks4Geeks") # Create the Metadata Object meta_data = db.MetaData(bind=engine) db.MetaData.reflect(meta_data) # Get the `sales` table from the Metadata object SALES = meta_data.tables['sales'] # SQLAlchemy Query to GROUP BY and aggregate SUM query = db.select([SALES.c.company, db.func.sum(SALES.c.no_of_invoices)]) \ .group_by(SALES.c.company) # Fetch all the records result = engine.execute(query).fetchall() # View the records for record in result: print("\n", "Company:", record[0], "| Sum of Invoices:", record[1])
Producción:
Explicación:
- Primero importamos la biblioteca sqlalchemy como db para simplificar. Todos los objetos, métodos, etc. de sqlalchemy se importarán utilizando el prefijo db para una mayor claridad.
- Luego creamos el motor que servirá como conexión a la base de datos para realizar todas las operaciones de la base de datos.
- Cree el objeto de metadatos. El objeto de metadatos `metadata` contiene toda la información sobre nuestra base de datos.
- Utilice la información de los metadatos para obtener la tabla de ventas de la base de datos.
- Ahora podemos escribir una consulta SQLAlchemy para obtener los registros requeridos. Primero agrupamos según el nombre de la empresa usando el método `group_by()` y luego encontramos la suma del número de facturas usando la función `func.sum()` de SQLalchemy.
- Imprima la salida. En la salida podemos ver que tenemos las distintas denominaciones sociales y su correspondiente suma de facturas producidas.
Ejemplo 2:
En este ejemplo, consideremos la siguiente tabla de estudiantes
En este ejemplo, realizaremos una operación GROUP BY tomando dos columnas como referencia.
Python
import sqlalchemy as db # Define the Engine (Connection Object) engine = db.create_engine( "mysql+pymysql://root:password@localhost/Geeks4Geeks") # Create the Metadata Object meta_data = db.MetaData(bind=engine) db.MetaData.reflect(meta_data) # Get the `students` table from the Metadata object STUDENTS = meta_data.tables['students'] # SQLAlchemy Query to GROUP BY and aggregate SUM query = db.select([ STUDENTS.c.first_name, STUDENTS.c.last_name, db.func.sum(STUDENTS.c.score) ]).group_by(STUDENTS.c.first_name, STUDENTS.c.last_name) # Fetch all the records result = engine.execute(query).fetchall() # View the records for record in result: print("\n", record[0], record[1], "| Total Score:", record[2])
Producción:
Explicación:
El código anterior es bastante similar al discutido en el Ejemplo 1, excepto por el hecho de que en este ejemplo realizamos la operación GROUP BY en varias columnas, a saber, los campos first_name y last_name . Se pueden mencionar varios campos dentro del método group_by() como parámetros separados.
Ejemplo 3:
Teniendo en cuenta la tabla de estudiantes mencionada en el Ejemplo 2, veamos cómo cambia la salida si realizamos la operación GROUP BY en el campo del curso .
Python
import sqlalchemy as db # Define the Engine (Connection Object) engine = db.create_engine( "mysql+pymysql://root:password@localhost/Geeks4Geeks") # Create the Metadata Object meta_data = db.MetaData(bind=engine) db.MetaData.reflect(meta_data) # Get the `students` table from the Metadata object STUDENTS = meta_data.tables['students'] # SQLAlchemy Query to GROUP BY and aggregate SUM query = db.select([ STUDENTS.c.course, db.func.sum(STUDENTS.c.score) ]).group_by(STUDENTS.c.course) # Fetch all the records result = engine.execute(query).fetchall() # View the records for record in result: print("\n", "Course:", record[0], "| Total Score:", record[1])
Producción:
Publicación traducida automáticamente
Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA