Travailler avec des tables hiérarchiques

Introduction aux bases de données en Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Tables hiérarchiques

  • Comportent une relation avec elles-mêmes
  • Fréquent dans :
    • Organisationnel
    • Géographique
    • Réseau
    • Graphe
Introduction aux bases de données en Python

Tables hiérarchiques — exemple

table_hiérarchique.jpg

Introduction aux bases de données en Python

Tables hiérarchiques — alias()

  • Nécessite d'afficher la table sous plusieurs noms
  • Crée une référence unique réutilisable
Introduction aux bases de données en Python

Interroger des données hiérarchiques

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'), ...
Introduction aux bases de données en Python

group_by et func

  • Il est essentiel d'appliquer group_by() au bon alias
  • Attention aux colonnes utilisées dans les fonctions
  • Si vous n'utilisez pas à la fois l'alias et le nom de table, ne créez pas d'alias
Introduction aux bases de données en Python

Interroger des données hiérarchiques

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'))]
Introduction aux bases de données en Python

Passons à la pratique !

Introduction aux bases de données en Python

Preparing Video For Download...