Робота з ієрархічними таблицями

Вступ до баз даних у Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Ієрархічні таблиці

  • Містять зв'язок із самими собою
  • Зазвичай трапляються в:
    • Організаційних
    • Географічних
    • Мережевих
    • Графових
Вступ до баз даних у Python

Ієрархічні таблиці — приклад

ієрархічна_таблиця.jpg

Вступ до баз даних у Python

Ієрархічні таблиці — alias()

  • Потрібен спосіб переглядати таблицю під кількома іменами
  • Створює унікальне посилання, яке можна використати
Вступ до баз даних у Python

Запити до ієрархічних даних

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'), ...
Вступ до баз даних у Python

group_by і func

  • Важливо застосувати group_by() до правильного псевдоніма
  • Обачно обирайте, над чим виконувати функції
  • Якщо у запиті не використовуєте і псевдонім, і назву таблиці, не створюйте псевдонім узагалі
Вступ до баз даних у Python

Запити до ієрархічних даних

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'))]
Вступ до баз даних у Python

Давайте потренуємось!

Вступ до баз даних у Python

Preparing Video For Download...