Werken met hiërarchische tabellen

Introductie tot databases in Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Hiërarchische tabellen

  • Hebben een relatie met zichzelf
  • Vaak te vinden in:
    • Organisaties
    • Geografisch
    • Netwerken
    • Grafen
Introductie tot databases in Python

Hiërarchische tabellen - voorbeeld

hiërarchische_tabel.jpg

Introductie tot databases in Python

Hiërarchische tabellen - alias()

  • Vereist een manier om de tabel onder meerdere namen te zien
  • Maakt een unieke referentie die we kunnen gebruiken
Introductie tot databases in Python

Hiërarchische data opvragen

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'), ...
Introductie tot databases in Python

group_by en func

  • Richt group_by() op de juiste alias
  • Let op waarop je functies toepast
  • Gebruik je in een query niet zowel alias als tabelnaam? Maak dan geen alias
Introductie tot databases in Python

Hiërarchische data opvragen

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'))]
Introductie tot databases in Python

Laten we oefenen!

Introductie tot databases in Python

Preparing Video For Download...