Pesquisa de site

Como agrupar e somar colunas SQL usando SQLAlchemy em Python?


À medida que avançamos no domínio do Python e de sua poderosa biblioteca SQLAlchemy, uma fonte de operações versáteis é revelada. Um desses recursos é a operação GroupBy e Sum em colunas SQL – uma operação de suma importância quando se trata de manipulação de banco de dados. SQLAlchemy, um kit de ferramentas SQL e sistema de mapeamento relacional de objetos (ORM) para Python, oferece uma riqueza de recursos, facilitando as operações SQL de uma forma Pythonic contínua. Vamos nos aprofundar em como podemos aproveitar SQLAlchemy para colunas GroupBy e Sum SQL.

Sintaxe

Neste artigo, exploraremos como usar SQLAlchemy, um popular kit de ferramentas Python SQL, para realizar agrupamento e soma de colunas SQL. Demonstraremos duas abordagens - a abordagem de Sessões ORM e a abordagem de Sessões Explícitas. As duas metodologias influenciam a força do SQLAlchemy em trabalhar em tarefas de base de informações e fornecer uma sintaxe perfeita e instintiva.

Stmt=session.query(Sales.product,func.sum(Sales.quantity).label('total_quantity')).group_by(Sales.product)

Algoritmo

Passo a passo -

  • Importe os módulos necessários.

  • Estabeleça uma sessão com o banco de dados.

  • Consulte o banco de dados, especificando a coluna pela qual deseja agrupar e somar.

  • Use a função group_by() para agrupar dados.

  • Use func.sum() para calcular a soma.

  • Execute o comando e busque os resultados.

  • Lide com exceções, se houver, e feche a sessão.

Abordagem 1: usando sessões explícitas

A primeira abordagem é usar sessões explícitas, o que é ideal para códigos baseados em aplicações.

Exemplo

from sqlalchemy import create_engine, Column, Integer, String, func
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Create a new engine instance
engine = create_engine('sqlite:///example.db')

Base = declarative_base()

# Define a new table with a name, metadata, and several columns
class Sales(Base):
   __tablename__ = 'sales'
   
   id = Column(Integer, primary_key=True)
   product = Column(String)
   quantity = Column(Integer)

# Create the table
Base.metadata.create_all(engine)

# Prepare data
data = [
   Sales(product='Apples', quantity=5),
   Sales(product='Oranges', quantity=7),
   Sales(product='Apples', quantity=3),
   Sales(product='Bananas', quantity=8),
   Sales(product='Apples', quantity=6),
   Sales(product='Oranges', quantity=9),
]

# Create a session
Session = sessionmaker(bind=engine)
session = Session()

try:
   # Add data to the session
   session.add_all(data)

   # Commit the changes
   session.commit()

   # Create a select statement
   stmt = session.query(Sales.product, func.sum(Sales.quantity).label('total_quantity')).group_by(Sales.product)

   # Execute the statement
   results = stmt.all()

   for result in results:
      print(result)

finally:
   # Close the session
   session.close()

Explicação

Nesta abordagem, seguimos uma configuração inicial semelhante à abordagem anterior, criando o mecanismo e definindo a estrutura da tabela. Criamos manualmente uma fábrica de sessões usando sessionmaker e abrimos uma sessão usando Session(). Dentro de um bloco try-finalmente, adicionamos os dados à sessão, confirmamos as alterações e criamos a instrução select para agrupamento e soma. Executamos a instrução, processamos os resultados e, por último, encerramos a sessão.

Essas duas metodologias oferecem várias maneiras de alcançar um resultado semelhante. Dependendo dos pré-requisitos do seu projeto e das inclinações de codificação, você pode escolher a metodologia que melhor atende às suas necessidades.

Abordagem 2: Usando Sessões ORM

A segunda abordagem utiliza SQLAlchemy ORM (Object Relational Mapper), que permite que classes sejam mapeadas para tabelas no banco de dados, oferecendo assim uma interface Pythonic de alto nível.

Exemplo

from sqlalchemy import create_engine, Column, Integer, String, func
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Create a new engine instance
engine = create_engine('sqlite:///example.db')

Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

# Define a new table with a name, metadata, and several columns
class Sales(Base):
   __tablename__ = 'sales'
    
   id = Column(Integer, primary_key=True)
   product = Column(String)
   quantity = Column(Integer)

# Create the table
Base.metadata.create_all(engine)

# Prepare data
data = [
   Sales(product='Apples', quantity=5),
   Sales(product='Oranges', quantity=7),
   Sales(product='Apples', quantity=3),
   Sales(product='Bananas', quantity=8),
   Sales(product='Apples', quantity=6),
   Sales(product='Oranges', quantity=9),
]

# Add and commit data to the session
session.add_all(data)
session.commit()

# Create a select statement
stmt = session.query(Sales.product, func.sum(Sales.quantity).label('total_quantity')).group_by(Sales.product)

# Execute the statement
results = stmt.all()

for result in results:
   print(result)

session.close()

Explicação

Nesta abordagem, começamos criando um mecanismo para conectar-se ao banco de dados. Em seguida, definimos uma fábrica de sessões usando sessionmaker e instanciamos um objeto de sessão. A seguir, declaramos uma classe base usando declarative_base() para nossas definições de tabela e definimos a estrutura da tabela usando a classe Sales. Criamos a tabela no banco de dados usando Base.metadata.create_all(engine).

Para realizar o agrupamento e somatório, adicionamos os dados necessários à sessão usando session.add_all(data) e confirmamos as alterações usando session.commit(). Criamos uma instrução select com agrupamento e soma usando session.query e func.sum, e a executamos usando stmt.all(). Por fim, processamos os resultados e fechamos a sessão usando session.close().

Conclusão

Agrupamento e soma de colunas em tabelas SQL são operações rudimentares, mas essenciais na manipulação e análise de dados. SQLAlchemy, com sua notável facilidade de uso e sintaxe semelhante ao Python, preenche a lacuna entre as operações SQL e a programação Python. A capacidade de usar sessões explícitas ou sessões ORM, dependendo do contexto, aumenta ainda mais o apelo do SQLAlchemy. Ambas as abordagens mencionadas acima podem ser adaptadas de acordo com os requisitos, estabelecendo uma base robusta para usuários Python que trabalham com bancos de dados SQL. Lembre-se sempre de encerrar suas sessões para liberar recursos. Com isso, agora você está munido do conhecimento para realizar operações GroupBy e Sum usando SQLAlchemy em Python. Boa codificação!

Artigos relacionados: