Obliczanie wartości w zapytaniu

Wprowadzenie do baz danych w Pythonie

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Operatory matematyczne

  • dodawanie +
  • odejmowanie -
  • mnożenie *
  • dzielenie /
  • modulo %
  • Działają różnie na różnych typach danych
Wprowadzenie do baz danych w Pythonie

Obliczanie różnicy

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)]
Wprowadzenie do baz danych w Pythonie

Instrukcja CASE

  • Służy do różnego traktowania danych w zależności od warunku
  • Przyjmuje listę warunków i kolumnę zwracaną po ich spełnieniu
  • Lista warunków kończy się klauzulą else określającą działanie, gdy żaden warunek nie jest spełniony
Wprowadzenie do baz danych w Pythonie

Przykład instrukcji 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,)]
Wprowadzenie do baz danych w Pythonie

Instrukcja CAST

  • Konwertuje dane na inny typ
  • Przydatne do konwersji...
    • liczb całkowitych na zmiennoprzecinkowe przy dzieleniu
    • ciągów znaków na daty i godziny
  • Przyjmuje kolumnę lub wyrażenie oraz docelowy typ
Wprowadzenie do baz danych w Pythonie

Przykład obliczania procentów

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'),)]
Wprowadzenie do baz danych w Pythonie

Czas na ćwiczenia!

Wprowadzenie do baz danych w Pythonie

Preparing Video For Download...