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

1.136 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.136
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
9
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Extensões para o Elixir Leandro Lameiro lameiro@gmail.com PyConBrasil 2008
  2. 2. Programa  SQLAlchemy  Elixir  Extensões legais existentes  Como fazer suas próprias extensões
  3. 3. SQLAlchemy?  SQLAlchemy é um toolkit SQL e um mapeador objeto-relacional.  Toolkit SQL - Permite escrever SQL em Python (sem depender de peculiaridades de bancos)
  4. 4. 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.
  5. 5. 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.
  6. 6. 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.
  7. 7. 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).
  8. 8. 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')
  9. 9. Elixir mariazinha = Aluno( nome='Mariazinha', idade=12, telefone='1234-5678' ) matematica = Materia( nome='Matemática' ) matematica.alunos.append(mariazinha)
  10. 10. Elixir In [1]: print mariazinha.materias [<Materia nome='Matemática'>]  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.
  11. 11. 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!
  12. 12. Criando sua própria extensão
  13. 13. Usando a extensão
  14. 14. 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 

×