Calcolare valori in una query

Introduzione ai database in Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Operatori matematici

  • addizione +
  • sottrazione -
  • moltiplicazione *
  • divisione /
  • modulo %
  • Comportamento diverso a seconda del tipo di dato
Introduzione ai database in Python

Calcolare la differenza

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)]
Introduzione ai database in Python

Istruzione CASE

  • Per trattare i dati in modo diverso in base a una condizione
  • Accetta un elenco di condizioni e la colonna da restituire se la condizione è vera
  • L’elenco termina con else per gestire i record che non soddisfano alcuna condizione precedente
Introduzione ai database in Python

Esempio di 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,)]
Introduzione ai database in Python

Istruzione CAST

  • Converte i dati in un altro tipo
  • Utile per convertire...
    • interi in float per la divisione
    • stringhe in date e orari
  • Accetta una colonna o espressione e il tipo di destinazione
Introduzione ai database in Python

Esempio di percentuale

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'),)]
Introduzione ai database in Python

Passiamo alla pratica!

Introduzione ai database in Python

Preparing Video For Download...