Trabalhando com tabelas hierárquicas

Introdução a Bancos de Dados em Python

Jason Myers

Co-Author of Essential SQLAlchemy and Software Engineer

Tabelas hierárquicas

  • Têm relação consigo mesmas
  • Comuns em:
    • Organizacionais
    • Geográficas
    • Redes
    • Grafos
Introdução a Bancos de Dados em Python

Tabelas hierárquicas - exemplo

Tabela hierárquica

Introdução a Bancos de Dados em Python

Tabelas hierárquicas - alias()

  • Precisa de uma forma de ver a tabela com vários nomes
  • Cria uma referência única que podemos usar
Introdução a Bancos de Dados em Python

Consultando dados hierárquicos

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'), ...
Introdução a Bancos de Dados em Python

group_by e func

  • É importante aplicar group_by() ao alias certo
  • Cuidado com onde você aplica funções
  • Se não precisar usar o alias e o nome da tabela na consulta, nem crie o alias
Introdução a Bancos de Dados em Python

Consultando dados hierárquicos

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'))]
Introdução a Bancos de Dados em Python

Vamos praticar!

Introdução a Bancos de Dados em Python

Preparing Video For Download...