SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Extensões para o Elixir
       Leandro Lameiro
     lameiro@gmail.com

      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
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.
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


Mais conteúdo relacionado

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

Scala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) IntroduçãoScala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) Introduçãopaulosuzart
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - FundamentosGustavo Sávio
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosLuis Borges Gouveia
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
Linguagem SQL (com MySQL)
Linguagem SQL (com MySQL)Linguagem SQL (com MySQL)
Linguagem SQL (com MySQL)Marco Pinheiro
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29Juliana Nascimento
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Apostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteApostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteIlton Barbosa
 
Apostila Banco de Dados ETE.pdf
Apostila Banco de Dados ETE.pdfApostila Banco de Dados ETE.pdf
Apostila Banco de Dados ETE.pdfJamieFranks3
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxAugustoNicolau2
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 

Semelhante a Leandro Lameiro - Extensões para o Elixir - Apresentação na PyConBrasil 2008 (20)

Scala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) IntroduçãoScala - Uma Breve (breve mesmo) Introdução
Scala - Uma Breve (breve mesmo) Introdução
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - Fundamentos
 
Exemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dadosExemplo e caso prático do uso de base de dados
Exemplo e caso prático do uso de base de dados
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
Linguagem SQL (com MySQL)
Linguagem SQL (com MySQL)Linguagem SQL (com MySQL)
Linguagem SQL (com MySQL)
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Vb
VbVb
Vb
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Apostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a ParteApostila PhP com Wamp 3a Parte
Apostila PhP com Wamp 3a Parte
 
Apostila Banco de Dados ETE.pdf
Apostila Banco de Dados ETE.pdfApostila Banco de Dados ETE.pdf
Apostila Banco de Dados ETE.pdf
 
Python 04
Python 04Python 04
Python 04
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Modulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptxModulo-02-Aula-02-conteudo-de-certi.pptx
Modulo-02-Aula-02-conteudo-de-certi.pptx
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
UMLIntro.pdf
UMLIntro.pdfUMLIntro.pdf
UMLIntro.pdf
 

Último

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Último (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

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

  • 1. Extensões para o Elixir Leandro Lameiro lameiro@gmail.com PyConBrasil 2008
  • 2. Programa  SQLAlchemy  Elixir  Extensões legais existentes  Como fazer suas próprias extensões
  • 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. 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. 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. 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. 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. 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. Elixir mariazinha = Aluno( nome='Mariazinha', idade=12, telefone='1234-5678' ) matematica = Materia( nome='Matemática' ) matematica.alunos.append(mariazinha)
  • 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. 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. Criando sua própria extensão
  • 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 