Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008
-
Upload
lameiro -
Category
Technology
-
view
878 -
download
5
Transcript of 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
SQLAlchemy?
SQLAlchemy é um toolkit SQL e um mapeador objeto-relacional.
Toolkit SQL - Permite escrever SQL em Python (sem depender de peculiaridades de bancos)
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.
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.
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.
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).
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')
Elixir
mariazinha = Aluno( nome='Mariazinha',
idade=12, telefone='1234-5678'
)
matematica = Materia( nome='Matemática'
)matematica.alunos.append(mariazinha)
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'>]
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!
Criando sua própria extensão
Usando a extensão
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