SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
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


Contenu connexe

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

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
QuitriaSilva550
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
Juliana Nascimento
 

Similaire à 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
 

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 