Lavorare con tabelle gerarchiche

Introduzione ai database in Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Tabelle gerarchiche

  • Hanno una relazione con sé stesse
  • Comuni in:
    • Organizzazioni
    • Geografia
    • Reti
    • Grafi
Introduzione ai database in Python

Tabelle gerarchiche - esempio

tabella gerarchica

Introduzione ai database in Python

Tabelle gerarchiche - alias()

  • Serve un modo per vedere la tabella con più nomi
  • Crea un riferimento univoco riutilizzabile
Introduzione ai database in Python

Interrogare dati gerarchici

managers = employees.alias()

stmt = select( [managers.columns.name.label('manager'), employees.columns.name.label('employee')])
stmt = stmt.select_from(employees.join( managers, managers.columns.id == employees.columns.manager)
stmt = stmt.order_by(managers.columns.name)
print(connection.execute(stmt).fetchall())
[(u'FILLMORE', u'GRANT'),
 (u'FILLMORE', u'ADAMS'),
 (u'HARDING', u'TAFT'), ...
Introduzione ai database in Python

group_by e func

  • È importante applicare group_by() all'alias corretto
  • Attenzione a quali colonne applichi le funzioni
  • Se non usi sia alias sia nome tabella in una query, non creare l'alias
Introduzione ai database in Python

Interrogare dati gerarchici

managers = employees.alias()

stmt = select([managers.columns.name, func.sum(employees.columns.sal)])
stmt = stmt.select_from(employees.join( managers, managers.columns.id == employees.columns.manager)
stmt = stmt.group_by(managers.columns.name) print(connection.execute(stmt).fetchall())
[(u'FILLMORE', Decimal('96000.00')),
 (u'GARFIELD', Decimal('83500.00')),
 (u'HARDING', Decimal('52000.00')),
 (u'JACKSON', Decimal('197000.00'))]
Introduzione ai database in Python

Passiamo alla pratica !

Introduzione ai database in Python

Preparing Video For Download...