Arbeta med hierarkiska tabeller

Introduktion till databaser i Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Hierarkiska tabeller

  • Innehåller en relation med sig själva
  • Förekommer ofta inom:
    • Organisationer
    • Geografi
    • Nätverk
    • Graf
Introduktion till databaser i Python

Hierarkiska tabeller – exempel

hierarchical_table.jpg

Introduktion till databaser i Python

Hierarkiska tabeller – alias()

  • Kräver ett sätt att visa tabellen via flera namn
  • Skapar en unik referens som kan användas
Introduktion till databaser i Python

Fråga hierarkisk data

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'), ...
Introduktion till databaser i Python

group_by och func

  • Det är viktigt att rikta group_by() mot rätt alias
  • Var noga med vilka kolumner du tillämpar funktioner på
  • Om du inte använder både aliaset och tabellnamnet i en fråga, skapa inget alias alls
Introduktion till databaser i Python

Fråga hierarkisk data

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'))]
Introduktion till databaser i Python

Nu kör vi en övning!

Introduktion till databaser i Python

Preparing Video For Download...