Lucrul cu tabele ierarhice

Introducere în baze de date în Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Tabele ierarhice

  • Conțin o relație cu ele însele
  • Întâlnite frecvent în:
    • Structuri organizaționale
    • Structuri geografice
    • Rețele
    • Grafuri
Introducere în baze de date în Python

Tabele ierarhice - exemplu

Exemplu de tabel ierarhic

Introducere în baze de date în Python

Tabele ierarhice - alias()

  • Necesită o modalitate de a accesa tabelul prin mai multe nume
  • Creează o referință unică utilizabilă
Introducere în baze de date în Python

Interogarea datelor ierarhice

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'), ...
Introducere în baze de date în Python

group_by și func

  • Este important să aplicați group_by() pe aliasul corect
  • Fiți atenți la ce coloane aplicați funcțiile
  • Dacă nu utilizați atât aliasul, cât și numele tabelului, nu creați aliasul
Introducere în baze de date în Python

Interogarea datelor ierarhice

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'))]
Introducere în baze de date în Python

Să exersăm!

Introducere în baze de date în Python

Preparing Video For Download...