Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

14
Extensões para o Elixir Leandro Lameiro [email protected] PyConBrasil 2008

Transcript of Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Page 1: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Extensões para o Elixir

Leandro [email protected]

PyConBrasil 2008

Page 2: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Programa

SQLAlchemy Elixir Extensões legais existentes Como fazer suas próprias extensões

Page 3: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

SQLAlchemy?

SQLAlchemy é um toolkit SQL e um mapeador objeto-relacional.

Toolkit SQL - Permite escrever SQL em Python (sem depender de peculiaridades de bancos)

Page 4: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Mapeamento objeto o que?!

Mapeamento objeto-relacional: Uma maneira de levar objetos para bancos relacionais.

A maioria das aplicações hoje são escritos em linguagem OO.

OO e relacional são sistemas de tipos diferentes. Levar o mundo OO para o mundo relacional não é sempre fácil.

Por exemplo, é difícil exprimir em modelo relacional o polimorfismo.

Ou exprimir em OO o constraint unique.

Page 5: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Ahh, SQLAlchemy

Permite definir como os seus objetos vão parar no banco.

Você tem controle total, inclusive de continuar usando o SQL.

Algo parecido com o Hibernate, mas sem os XMLs.

Suporte a vários bancos, multiplos bancos simulatâneos, etc.

Page 6: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Elixir?

ActiveRecord para Python, sobre o SQLAlchemy.

É um pattern descrito no Patterns of Enterprise Application Architecture – Martin Fowler

É uma maneira simples de persistir os dados sem precisar pensar muito, sem saber SQL.

Uma tabela por classe, uma linha por instância. (mais ou menos...)

Dá métodos de busca, inserção etc.

Page 7: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Chega de blá-blá-blá: Quero ver código!

Criar objeto: aluno = Aluno() Ler atributos: aluno.nome Escrever atributos: aluno.nome = 'Foobar'

Elixir/SQLAlchemy cuidam de montar o SQL correto (no caso INSERT, SELECT e UPDATE, respectivamente).

Page 8: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Elixir

class Aluno(Entity): nome = Field(Text) telefone = Field(Text) idade = Field(Integer) materias = ManyToMany('Materia')

class Materia(Entity): nome = Field(Text) alunos = ManyToMany('Aluno')

Page 9: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Elixir

mariazinha = Aluno( nome='Mariazinha',

idade=12, telefone='1234-5678'

)

matematica = Materia( nome='Matemática'

)matematica.alunos.append(mariazinha)

Page 10: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Elixir

Depois de inserir (append) na lista, o Elixir trata de inserir no banco de dados, ligar as chaves primárias/estrangeiras etc.

Nem uma linhazinha de SQL. Nada de chave primária, chave estrangeira, tabela intermediária. Nada.

In [1]: print mariazinha.materias[<Materia nome='Matemática'>]

Page 11: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Extensões legais

Encriptação Campos automaticamente encriptados

Wiki Colunas com controle de versão e suporte a

consulta de versões antigas, reversão etc.

Validação Validação de formato, limites, etc.

E é muito fácil fazer outras!

Page 12: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Criando sua própria extensão

Page 13: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Usando a extensão

Page 14: Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008

Referências

http://en.wikipedia.org/wiki/Active_record_pattern http://en.wikipedia.org/wiki/Object-

relational_mapping Patterns of Enterprise Application Architecture –

Martin Fowler http://en.wikipedia.org/wiki/Object-

Relational_impedance_mismatch http://www.sqlalchemy.org/ http://elixir.ematia.de/trac/wiki