Calculando valores em uma consulta

Introdução a Bancos de Dados em Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Operadores matemáticos

  • adição +
  • subtração -
  • multiplicação *
  • divisão /
  • módulo %
  • Funcionam de forma diferente conforme o tipo de dado
Introdução a Bancos de Dados em Python

Calculando a diferença

stmt = select([census.columns.age,           
        (census.columns.pop2008 -
        census.columns.pop2000).label('pop_change')
    ])

stmt = stmt.group_by(census.columns.age) stmt = stmt.order_by(desc('pop_change'))
stmt = stmt.limit(5)
results = connection.execute(stmt).fetchall() print(results)
[(61, 52672), (85, 51901), (54, 50808), (58, 45575),
(60, 44915)]
Introdução a Bancos de Dados em Python

Instrução case

  • Usado para tratar dados de forma diferente com base em uma condição
  • Aceita uma lista de condições e a coluna a retornar quando houver correspondência
  • A lista termina com um else para definir o que fazer quando não houver correspondência
Introdução a Bancos de Dados em Python

Exemplo de case

from sqlalchemy import case

stmt = select([ func.sum( case([ (census.columns.state == 'New York', census.columns.pop2008) ], else_=0))])
results = connection.execute(stmt).fetchall() print(results)
[(19465159,)]
Introdução a Bancos de Dados em Python

Instrução cast

  • Converte dados para outro tipo
  • Útil para converter...
    • inteiros em floats para divisão
    • strings em datas e horas
  • Aceita uma coluna ou expressão e o Type de destino
Introdução a Bancos de Dados em Python

Exemplo de porcentagem

from sqlalchemy import case, cast, Float

stmt = select([ (func.sum( case([ (census.columns.state == 'New York', census.columns.pop2008) ], else_=0)) / cast(func.sum(census.columns.pop2008), Float) * 100).label('ny_percent')])
results = connection.execute(stmt).fetchall() print(results)
[(Decimal('6.4267619765'),)]
Introdução a Bancos de Dados em Python

Vamos praticar!

Introdução a Bancos de Dados em Python

Preparing Video For Download...