SlideShare uma empresa Scribd logo
1 de 112
Baixar para ler offline
A magia do mapeamento objeto relacional com
                  SQLAlchemy
                  Python ORM(Mapeamento objeto relacional)


                                           Ramiro Luz2
                                   1 Associacao
                                            ¸˜    Python Brasil - APyBR
                                2 Comunidade      ´
                                            de usuarios Python Brasileira
                                               ´
                                  Grupo de Usuarios Python do Parana´


                                               ˜
   Congresso Internacional de Software Livre, Sao Paulo-SP, 2008



Ramiro Batista da Luz (APyBR)            SQLAlchemy - Python - ORM          CONISLI 2008   1 / 72
Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   2 / 72
Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   2 / 72
Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   2 / 72
Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   2 / 72
¸˜
                                     Introducao   Sobre o palestrante


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   3 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                  Introducao   Sobre o palestrante


    ´
Historia de programador


                      ´
      cp200, fitas magneticas, gravadores e programas em basic.
      Turbo Pascal e Clipper Summer.
      A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic,
      Java, Delphi, PHP e finalmente a linguagem Python.
        ´
      Proximas tentativas, Haskell, Smalltalk, Common Lisp.
      Comunidades
                             ´                     ´
             Grupo de usuarios Debian do Parana, GUD-BR-PR
             http://www.debian-pr.org/
                             ´                               ´
             Grupo de usuarios da linguagem Python do Parana, GruPy-PR
             http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
                                                                ¸˜
             Membro suplente do Conselho Deliberativo da Associacao Python
             Brasil, http://associacao.pythonbrasil.org/



 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM           CONISLI 2008   4 / 72
¸˜
                                     Introducao   Sobre a palestra


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM        CONISLI 2008   5 / 72
¸˜
                                  Introducao   Sobre a palestra


Conceitos




              ¸˜
      Programacao
      Bancos de dados
             ¸˜
      Orientacao a objetos
              ´
      Termos tecnicos usados na palestra.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM        CONISLI 2008   6 / 72
¸˜
                                  Introducao   Sobre a palestra


Conceitos




              ¸˜
      Programacao
      Bancos de dados
             ¸˜
      Orientacao a objetos
              ´
      Termos tecnicos usados na palestra.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM        CONISLI 2008   6 / 72
¸˜
                                  Introducao   Sobre a palestra


Conceitos




              ¸˜
      Programacao
      Bancos de dados
             ¸˜
      Orientacao a objetos
              ´
      Termos tecnicos usados na palestra.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM        CONISLI 2008   6 / 72
¸˜
                                  Introducao   Sobre a palestra


Conceitos




              ¸˜
      Programacao
      Bancos de dados
             ¸˜
      Orientacao a objetos
              ´
      Termos tecnicos usados na palestra.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM        CONISLI 2008   6 / 72
Framework SQLAlchemy    Conteudo
                                                                 ´


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   7 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


A linguagem Python
                                ¸˜      ˆ
      Linguagem de programacao dinamica e interpretada de facil  ´
      aprendizado.
      Usada em uma grande variedade de dom´nios de aplicacoes,
                                                  ı             ¸˜
      Web, processamento de email, tratamento de html e xml, acesso
                                ¸˜                           ´
      a banco de dados, aplicacoes para rede, interfaces graficas,
                ¸˜                         ¸˜
      computacao cient´fica, jogos, educacao, entre outras.
                         ı
      Clareza da sintaxe, Identacao
                                  ¸ ˜ obrigatoria, pequena quantidade de
                                              ´
                                             ˜          ´
      palavras reservadas, as bibliotecas sao muitos faceis de usar.
                                                               ´
      Python possue uma grande variedade de bibliotecas, alem da
                      ˜
      biblioteca padrao a linguagem conta com uma enorme variedade
      de bibliotecas encontradas no ´ndice de pacotes python,
                                      ı
      http://pypi.python.org/pypi
      Linguagem com uma produtividade muito grande, tarefas
                                        ´
      completas com poucas linhas, codigo simples, facilidade de
                ¸˜
      manutencao.
 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   8 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


A linguagem Python
                                ¸˜      ˆ
      Linguagem de programacao dinamica e interpretada de facil  ´
      aprendizado.
      Usada em uma grande variedade de dom´nios de aplicacoes,
                                                  ı             ¸˜
      Web, processamento de email, tratamento de html e xml, acesso
                                ¸˜                           ´
      a banco de dados, aplicacoes para rede, interfaces graficas,
                ¸˜                         ¸˜
      computacao cient´fica, jogos, educacao, entre outras.
                         ı
      Clareza da sintaxe, Identacao
                                  ¸ ˜ obrigatoria, pequena quantidade de
                                              ´
                                             ˜          ´
      palavras reservadas, as bibliotecas sao muitos faceis de usar.
                                                               ´
      Python possue uma grande variedade de bibliotecas, alem da
                      ˜
      biblioteca padrao a linguagem conta com uma enorme variedade
      de bibliotecas encontradas no ´ndice de pacotes python,
                                      ı
      http://pypi.python.org/pypi
      Linguagem com uma produtividade muito grande, tarefas
                                        ´
      completas com poucas linhas, codigo simples, facilidade de
                ¸˜
      manutencao.
 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   8 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


A linguagem Python
                                ¸˜      ˆ
      Linguagem de programacao dinamica e interpretada de facil  ´
      aprendizado.
      Usada em uma grande variedade de dom´nios de aplicacoes,
                                                  ı             ¸˜
      Web, processamento de email, tratamento de html e xml, acesso
                                ¸˜                           ´
      a banco de dados, aplicacoes para rede, interfaces graficas,
                ¸˜                         ¸˜
      computacao cient´fica, jogos, educacao, entre outras.
                         ı
      Clareza da sintaxe, Identacao
                                  ¸ ˜ obrigatoria, pequena quantidade de
                                              ´
                                             ˜          ´
      palavras reservadas, as bibliotecas sao muitos faceis de usar.
                                                               ´
      Python possue uma grande variedade de bibliotecas, alem da
                      ˜
      biblioteca padrao a linguagem conta com uma enorme variedade
      de bibliotecas encontradas no ´ndice de pacotes python,
                                      ı
      http://pypi.python.org/pypi
      Linguagem com uma produtividade muito grande, tarefas
                                        ´
      completas com poucas linhas, codigo simples, facilidade de
                ¸˜
      manutencao.
 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   8 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


A linguagem Python
                                ¸˜      ˆ
      Linguagem de programacao dinamica e interpretada de facil  ´
      aprendizado.
      Usada em uma grande variedade de dom´nios de aplicacoes,
                                                  ı             ¸˜
      Web, processamento de email, tratamento de html e xml, acesso
                                ¸˜                           ´
      a banco de dados, aplicacoes para rede, interfaces graficas,
                ¸˜                         ¸˜
      computacao cient´fica, jogos, educacao, entre outras.
                         ı
      Clareza da sintaxe, Identacao
                                  ¸ ˜ obrigatoria, pequena quantidade de
                                              ´
                                             ˜          ´
      palavras reservadas, as bibliotecas sao muitos faceis de usar.
                                                               ´
      Python possue uma grande variedade de bibliotecas, alem da
                      ˜
      biblioteca padrao a linguagem conta com uma enorme variedade
      de bibliotecas encontradas no ´ndice de pacotes python,
                                      ı
      http://pypi.python.org/pypi
      Linguagem com uma produtividade muito grande, tarefas
                                        ´
      completas com poucas linhas, codigo simples, facilidade de
                ¸˜
      manutencao.
 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   8 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


A linguagem Python
                                ¸˜      ˆ
      Linguagem de programacao dinamica e interpretada de facil  ´
      aprendizado.
      Usada em uma grande variedade de dom´nios de aplicacoes,
                                                  ı             ¸˜
      Web, processamento de email, tratamento de html e xml, acesso
                                ¸˜                           ´
      a banco de dados, aplicacoes para rede, interfaces graficas,
                ¸˜                         ¸˜
      computacao cient´fica, jogos, educacao, entre outras.
                         ı
      Clareza da sintaxe, Identacao
                                  ¸ ˜ obrigatoria, pequena quantidade de
                                              ´
                                             ˜          ´
      palavras reservadas, as bibliotecas sao muitos faceis de usar.
                                                               ´
      Python possue uma grande variedade de bibliotecas, alem da
                      ˜
      biblioteca padrao a linguagem conta com uma enorme variedade
      de bibliotecas encontradas no ´ndice de pacotes python,
                                      ı
      http://pypi.python.org/pypi
      Linguagem com uma produtividade muito grande, tarefas
                                        ´
      completas com poucas linhas, codigo simples, facilidade de
                ¸˜
      manutencao.
 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   8 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Bancos de dados relacionais


                                           ´
      Dados: Registros ou ind´cios relacionaveis a alguma entidade ou
                             ı
      evento.[3].
      Dados organizados produzem informaes. Sistemas de
      Gerenciamento de Bancos de Dados.
      Modelos: Modelo Orientado a Objetos, Modelos Navegacionais,
                              ´
      divididos em Modelo Hierarquico e Modelo em Redes.
      Modelo relacional: Armazenar dados em tabelas, organizadas em
                                               ¸˜
      linhas e colunas. Tabelas podem ter relacoes entre si.
           ˜
      Cartoes perfurados, arquivos texto, arquivos estruturados,
      sistemas de gerenciamento de bancos.



 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   9 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Bancos de dados relacionais


                                           ´
      Dados: Registros ou ind´cios relacionaveis a alguma entidade ou
                             ı
      evento.[3].
      Dados organizados produzem informaes. Sistemas de
      Gerenciamento de Bancos de Dados.
      Modelos: Modelo Orientado a Objetos, Modelos Navegacionais,
                              ´
      divididos em Modelo Hierarquico e Modelo em Redes.
      Modelo relacional: Armazenar dados em tabelas, organizadas em
                                               ¸˜
      linhas e colunas. Tabelas podem ter relacoes entre si.
           ˜
      Cartoes perfurados, arquivos texto, arquivos estruturados,
      sistemas de gerenciamento de bancos.



 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   9 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Bancos de dados relacionais


                                           ´
      Dados: Registros ou ind´cios relacionaveis a alguma entidade ou
                             ı
      evento.[3].
      Dados organizados produzem informaes. Sistemas de
      Gerenciamento de Bancos de Dados.
      Modelos: Modelo Orientado a Objetos, Modelos Navegacionais,
                              ´
      divididos em Modelo Hierarquico e Modelo em Redes.
      Modelo relacional: Armazenar dados em tabelas, organizadas em
                                               ¸˜
      linhas e colunas. Tabelas podem ter relacoes entre si.
           ˜
      Cartoes perfurados, arquivos texto, arquivos estruturados,
      sistemas de gerenciamento de bancos.



 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   9 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Bancos de dados relacionais


                                           ´
      Dados: Registros ou ind´cios relacionaveis a alguma entidade ou
                             ı
      evento.[3].
      Dados organizados produzem informaes. Sistemas de
      Gerenciamento de Bancos de Dados.
      Modelos: Modelo Orientado a Objetos, Modelos Navegacionais,
                              ´
      divididos em Modelo Hierarquico e Modelo em Redes.
      Modelo relacional: Armazenar dados em tabelas, organizadas em
                                               ¸˜
      linhas e colunas. Tabelas podem ter relacoes entre si.
           ˜
      Cartoes perfurados, arquivos texto, arquivos estruturados,
      sistemas de gerenciamento de bancos.



 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   9 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Bancos de dados relacionais


                                           ´
      Dados: Registros ou ind´cios relacionaveis a alguma entidade ou
                             ı
      evento.[3].
      Dados organizados produzem informaes. Sistemas de
      Gerenciamento de Bancos de Dados.
      Modelos: Modelo Orientado a Objetos, Modelos Navegacionais,
                              ´
      divididos em Modelo Hierarquico e Modelo em Redes.
      Modelo relacional: Armazenar dados em tabelas, organizadas em
                                               ¸˜
      linhas e colunas. Tabelas podem ter relacoes entre si.
           ˜
      Cartoes perfurados, arquivos texto, arquivos estruturados,
      sistemas de gerenciamento de bancos.



 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   9 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


       ¸˜
Orientacao a objetos


           ¸˜        ´                ¸˜
      Evolucao das tecnicas: Programacao estruturada - estruturada
      modular - orientada a objetos.
             ¸˜
      Orientacao a objetos embutida na linguagem Python, Veja o
      exemplo:
      >>> print quot;testequot;.upper()
      TESTE


                                 ´         ´
      A constante string ”teste”ja possui metodos de string, como
      ”upper”.
      Dados relacionais(linhas e colunas) X Estruturas e elementos das
                              ¸˜
      linguagens de programacao.
                                 ¸˜
      Banco de dados + Orientacao a objetos -> Mapeamento
      objeto relacional.


 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   10 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


       ¸˜
Orientacao a objetos


           ¸˜        ´                ¸˜
      Evolucao das tecnicas: Programacao estruturada - estruturada
      modular - orientada a objetos.
             ¸˜
      Orientacao a objetos embutida na linguagem Python, Veja o
      exemplo:
      >>> print quot;testequot;.upper()
      TESTE


                                 ´         ´
      A constante string ”teste”ja possui metodos de string, como
      ”upper”.
      Dados relacionais(linhas e colunas) X Estruturas e elementos das
                              ¸˜
      linguagens de programacao.
                                 ¸˜
      Banco de dados + Orientacao a objetos -> Mapeamento
      objeto relacional.


 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   10 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


       ¸˜
Orientacao a objetos


           ¸˜        ´                ¸˜
      Evolucao das tecnicas: Programacao estruturada - estruturada
      modular - orientada a objetos.
             ¸˜
      Orientacao a objetos embutida na linguagem Python, Veja o
      exemplo:
      >>> print quot;testequot;.upper()
      TESTE


                                 ´         ´
      A constante string ”teste”ja possui metodos de string, como
      ”upper”.
      Dados relacionais(linhas e colunas) X Estruturas e elementos das
                              ¸˜
      linguagens de programacao.
                                 ¸˜
      Banco de dados + Orientacao a objetos -> Mapeamento
      objeto relacional.


 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   10 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


       ¸˜
Orientacao a objetos


           ¸˜        ´                ¸˜
      Evolucao das tecnicas: Programacao estruturada - estruturada
      modular - orientada a objetos.
             ¸˜
      Orientacao a objetos embutida na linguagem Python, Veja o
      exemplo:
      >>> print quot;testequot;.upper()
      TESTE


                                 ´         ´
      A constante string ”teste”ja possui metodos de string, como
      ”upper”.
      Dados relacionais(linhas e colunas) X Estruturas e elementos das
                              ¸˜
      linguagens de programacao.
                                 ¸˜
      Banco de dados + Orientacao a objetos -> Mapeamento
      objeto relacional.


 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   10 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Frameworks



      Arcabouco, que pode ser definido como: Esboco, delineamento
                ¸                                 ¸
                                                     ¸˜
      inicial. Esqueleto. Madeiramento de uma construcao. Estrutura
             ´                                            ¸˜
      que da suporte para um projeto, organismo ou construcao maior.
                ´               ´
      Na informatica esse termo e usado para descrever uma estrutura
                             ¸˜            ¸˜
      a ser usada na construcao e organizacao de sistemas.
                                             ¸˜
      Um framework fornece bibliotecas e funcoes que ajudam o
      programador no desenvolvimento organizado de projetos maiores.




 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   11 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Frameworks



      Arcabouco, que pode ser definido como: Esboco, delineamento
                ¸                                 ¸
                                                     ¸˜
      inicial. Esqueleto. Madeiramento de uma construcao. Estrutura
             ´                                            ¸˜
      que da suporte para um projeto, organismo ou construcao maior.
                ´               ´
      Na informatica esse termo e usado para descrever uma estrutura
                             ¸˜            ¸˜
      a ser usada na construcao e organizacao de sistemas.
                                             ¸˜
      Um framework fornece bibliotecas e funcoes que ajudam o
      programador no desenvolvimento organizado de projetos maiores.




 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   11 / 72
Framework SQLAlchemy    Conteudo
                                                              ´


Frameworks



      Arcabouco, que pode ser definido como: Esboco, delineamento
                ¸                                 ¸
                                                     ¸˜
      inicial. Esqueleto. Madeiramento de uma construcao. Estrutura
             ´                                            ¸˜
      que da suporte para um projeto, organismo ou construcao maior.
                ´               ´
      Na informatica esse termo e usado para descrever uma estrutura
                             ¸˜            ¸˜
      a ser usada na construcao e organizacao de sistemas.
                                             ¸˜
      Um framework fornece bibliotecas e funcoes que ajudam o
      programador no desenvolvimento organizado de projetos maiores.




 Ramiro Batista da Luz (APyBR)             SQLAlchemy - Python - ORM   CONISLI 2008   11 / 72
˜
                                    Mao na massa   Os ingredientes


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM       CONISLI 2008   12 / 72
˜
                                 Mao na massa   Os ingredientes


       ¸˜
Instalacao



      Assim como a maioria dos programas feitos com a linguagem
                                    `                  ´
      Python a maneira de instalar a partir dos fontes e descompactar e
                              ´
      executar dentro do diretorio o comando:
       # python setup.py install

                  ¸˜
      Em distribuicoes derivadas do debian o seguinte comando pode
      ser executado:
       # aptitude install python-sqlalchemy python-sqlalchemy-doc

            ´                                            ¸˜
      E tambem usando a ferramenta setuptools[1], instalacao[2].
       # easy install SQLAlchemy




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM       CONISLI 2008   13 / 72
˜
                                 Mao na massa   Os ingredientes


       ¸˜
Instalacao



      Assim como a maioria dos programas feitos com a linguagem
                                    `                  ´
      Python a maneira de instalar a partir dos fontes e descompactar e
                              ´
      executar dentro do diretorio o comando:
       # python setup.py install

                  ¸˜
      Em distribuicoes derivadas do debian o seguinte comando pode
      ser executado:
       # aptitude install python-sqlalchemy python-sqlalchemy-doc

            ´                                            ¸˜
      E tambem usando a ferramenta setuptools[1], instalacao[2].
       # easy install SQLAlchemy




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM       CONISLI 2008   13 / 72
˜
                                 Mao na massa   Os ingredientes


       ¸˜
Instalacao



      Assim como a maioria dos programas feitos com a linguagem
                                    `                  ´
      Python a maneira de instalar a partir dos fontes e descompactar e
                              ´
      executar dentro do diretorio o comando:
       # python setup.py install

                  ¸˜
      Em distribuicoes derivadas do debian o seguinte comando pode
      ser executado:
       # aptitude install python-sqlalchemy python-sqlalchemy-doc

            ´                                            ¸˜
      E tambem usando a ferramenta setuptools[1], instalacao[2].
       # easy install SQLAlchemy




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM       CONISLI 2008   13 / 72
˜
                                    Mao na massa          ¸˜
                                                   Preparacao


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM   CONISLI 2008   14 / 72
˜
                                  Mao na massa           ¸˜
                                                  Preparacao


Verso




              ˜
Obtendo a versao da biblioteca
>>> # Acessando a propriedade __version__ obtemos uma
>>> # string com a vers˜o da biblioteca instalada.
                       a
>>> import sqlalchemy
>>> sqlalchemy.__version__
’0.5.0’




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   15 / 72
˜
                                    Mao na massa           ¸˜
                                                    Preparacao


     ˜
Conexao



                                           ´           ´
Conectando um banco de dados sqllite temporario, na memoria do
computador
>>>                `
      # Conectando a um banco de dados sqllite tempor´rio,
                                                     a
>>>   # na memoria do computador.
>>>   from sqlalchemy import create_engine
>>>   # postgres
>>>   pg_db = create_engine(’postgres://scott:tiger@localhost:5432/mydatabase’)
>>>   # sqlite (note the four slashes for an absolute path)
>>>   sqlite_db = create_engine(’sqlite:////absolute/path/to/database.txt’)
>>>   # mysql
>>>   mysql_db = create_engine(’mysql://localhost/foo’)
>>>   # sqllite em mem´ria.
                      o
>>>   engine = create_engine(’sqlite:///:memory:’, echo=True)




 Ramiro Batista da Luz (APyBR)        SQLAlchemy - Python - ORM               CONISLI 2008   16 / 72
˜
                                    Mao na massa           ¸˜
                                                    Preparacao


Modelo



     ¸˜
Definicao da estrutura do banco
>>>   from sqlalchemy import Table, Column, Integer
>>>   from sqlalchemy import String, MetaData, ForeignKey
>>>   metadata = MetaData()
>>>   users = Table(’users’, metadata,
...       Column(’id’, Integer, primary_key=True),
...       Column(’name’, String(50)),
...       Column(’fullname’, String((50)),
...   )

>>> addresses = Table(’addresses’, metadata,
...   Column(’id’, Integer, primary_key=True),
...   Column(’user_id’, None, ForeignKey(’users.id’)),
...   Column(’email_address’, String(100), nullable=False)
... )




 Ramiro Batista da Luz (APyBR)        SQLAlchemy - Python - ORM   CONISLI 2008   17 / 72
˜
                                  Mao na massa             ¸˜
                                                    Preparacao


    ¸˜
Criacao




Criando as tabelas no banco
          ¸˜
>>> # Criacao das tabelas no banco.
>>> metadata.create_all(engine)




 Ramiro Batista da Luz (APyBR)        SQLAlchemy - Python - ORM   CONISLI 2008   18 / 72
˜
                                  Mao na massa           ¸˜
                                                  Preparacao


As classes



Criando uma classe em python
>>> class User(object):
...     def __init__(self, name, fullname, password):
...         self.name = name
...         self.fullname = fullname
...         self.password = password
...
...     # M´todo que quot;representaquot; o objeto, por
           e
...     # exemplo ao usar o comando quot;print objetoquot;
...     def __repr__(self):
...        return quot;<User(’%s’,’%s’, ’%s’)>quot; % (self.name, 
...                                        self.fullname, 
...                                        self.password)




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   19 / 72
˜
                                  Mao na massa           ¸˜
                                                  Preparacao


O Mapeamento




Definido o mapeamento
>>> from sqlalchemy.orm import mapper
>>> mapper(User, users_table)
<Mapper at 0x...; User>




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   20 / 72
˜
                                    Mao na massa          ¸˜
                                                   Utilizacao da biblioteca


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM                CONISLI 2008   21 / 72
˜
                                  Mao na massa           ¸˜
                                                  Utilizacao da biblioteca


Criando objetos




      ¸˜
A criacao de um objeto
            ¸˜
>>> # A criacao de um novo registro segue os padr˜es de
                                                 o
>>> # objetos python.
>>> ed_user = User(’ed’, ’Ed Jones’, ’edspassword’)
>>> ed_user.name
’ed’
>>> ed_user.password
’edspassword’
>>> str(ed_user.id)
’None’




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM                CONISLI 2008   22 / 72
˜
                                    Mao na massa           ¸˜
                                                    Utilizacao da biblioteca


    ˜
Sessoes




                       ˜
Definindo e criando sessoes
>>>   # Com o comando sessionmaker criamos uma
>>>   # fabrica de sess˜es.
                       o
>>>   from sqlalchemy.orm import sessionmaker
>>>   Session = sessionmaker(bind=engine)
>>>   session = Session()




 Ramiro Batista da Luz (APyBR)        SQLAlchemy - Python - ORM                CONISLI 2008   23 / 72
˜
                                  Mao na massa           ¸˜
                                                  Utilizacao da biblioteca


Persistencia




Persistencia no banco
                                                    `
>>> # Para persistir o objeto ed_user, adicionamos a sess˜o.
                                                         a
>>> # Assim que for necess´rio o comando INSERT ser´ executado.
                          a                         a
>>> ed_user = User(’ed’, ’Ed Jones’, ’edspassword’)
>>> session.add(ed_user)
>>> our_user = session.query(User).
...                    filter_by(name=’ed’).
...                    first() # INSERT e SELECT
>>> ed_user is our_user
True




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM                CONISLI 2008   24 / 72
˜
                                  Mao na massa           ¸˜
                                                  Utilizacao da biblioteca


Salvando lista de objetos




             ´
Adicionando varios objetos de uma vez
# Adicionando uma lista de usu´rios.
                              a
>>> session.add_all([
...     User(’wendy’, ’Wendy Williams’, ’foobar’),
...     User(’mary’, ’Mary Contrary’, ’xxg527’),
...     User(’fred’, ’Fred Flinstone’, ’blah’)])




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM                CONISLI 2008   25 / 72
˜
                                  Mao na massa             ¸˜
                                                    Utilizacao da biblioteca


      ¸˜
Alteracao



      ¸˜           ¸˜
Alteracao e confirmacao
>>> ed_user.password = ’f8s7ccs’
>>> session.dirty
IdentitySet([<User(’ed’,’Ed Jones’, ’f8s7ccs’)>])
>>> session.new
IdentitySet([
<User(’wendy’,’Wendy Williams’, ’foobar’)>,
<User(’mary’,’Mary Contrary’, ’xxg527’)>,
<User(’fred’,’Fred Flinstone’, ’blah’)>])
>>> session.commit()
>>> ed_user.id




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM                  CONISLI 2008   26 / 72
˜
                                  Mao na massa           ¸˜
                                                  Utilizacao da biblioteca


Desfazendo mudancas
                ¸



Alterando e desfazendo as mudancas
                               ¸
>>> ed_user.name = ’Edwardo’
>>> fake_user = User(’fakeuser’, ’Invalid’, ’12345’)
>>> session.add(fake_user)
>>> session.query(User).filter(User.name.
...         in_([’Edwardo’, ’fakeuser’])).all()
[<User(’Edwardo’,’Ed Jones’, ’f8s7ccs’)>,
 <User(’fakeuser’,’Invalid’, ’12345’)>]
>>> session.rollback()
>>> ed_user.name
>>> fake_user in session
False
>>> session.query(User).filter(User.name.
...        in_([’ed’, ’fakeuser’])).all()
[<User(’ed’,’Ed Jones’, ’f8s7ccs’)>]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM                CONISLI 2008   27 / 72
˜
                                    Mao na massa   Consultando


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM   CONISLI 2008   28 / 72
˜
                                  Mao na massa    Consultando


Obtendo objetos




Iterando por objetos
                ¸˜
>>> # Cada iteracao retorna um objeto usu´rio.
                                          a
>>> for instance in session.query(User).
...                 order_by(User.id):
...     print instance.name, instance.fullname




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   29 / 72
˜
                                  Mao na massa     Consultando


Obtendo tuplas




Iterando por tuplas
                     ¸˜
>>> # Para cada iteracao as vari´veis recebem os
                                a
>>> # valores das propriedades dos registros.
>>> for name, fullname in session.
                query(User.name, User.fullname):
...     print name, fullname




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM    CONISLI 2008   30 / 72
˜
                                  Mao na massa    Consultando


Obtendo tuplas com objetos




Tuplas com objetos e valores
                ¸˜
>>> # Cada iteracao retorna uma tupla com os valores das propriedades.
>>> for name, fullname in session.query(User.name, User.fullname):
...     print name, fullname




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM            CONISLI 2008   31 / 72
˜
                                  Mao na massa    Consultando


                          ¸˜
Aplicando limites e paginacao



Limitando os resultados com fatiamento(slice) de listas
>>> # O seguinte slice aplica um limite de 2 e deslocamento 0.
>>> for u in session.query(User).order_by(User.id)[1:3]:
...    print u

>>> # O seguinte slice aplica um limite de 2 e deslocamento 3.
>>> for u in session.query(User).order_by(User.id)[3:5]:
...    print u

>>> # Navegando de dois em dois.
>>> for u in session.query(User).order_by(User.id)[::2]:
...    print u




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM    CONISLI 2008   32 / 72
˜
                                  Mao na massa    Consultando


Filtrando




Com filtros usando argumentos com palavras chave
>>> # Os parametros com palavra chave s˜o usados para
                                        a
>>> # montar o where.
>>> for name, in session.query(User.name).
...               filter_by(fullname=’Ed Jones’):
...    print name




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   33 / 72
˜
                                  Mao na massa    Consultando


              ˜
Usando expressoes




                      ˜
Filtros usando expressoes python
>>> # Operadores python podem ser usados com atributos de
>>> # classe.
>>> for name, in session.query(User.name).
...           filter(User.fullname==’Ed Jones’):
...    print name




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   34 / 72
˜
                                  Mao na massa    Consultando


”Join”encadeando filtros




”filter”retorna objetos query
                ¸˜
>>> # Cada iteracao retorna um objeto usu´rio.
                                          a
>>> for instance in session.query(User).
...                 order_by(User.id):
...     print instance.name, instance.fullname




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   35 / 72
˜
                                    Mao na massa   Operadores


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM   CONISLI 2008   36 / 72
˜
                                  Mao na massa   Operadores


Igualdade




Operador de igualdade
# Operador de igualdade.
query.filter(User.name == ’ed’)




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   37 / 72
˜
                                  Mao na massa   Operadores


Diferenca
       ¸




Operador de diferenca
                   ¸
# Operador diferente.
query.filter(User.name != ’ed’)




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   38 / 72
˜
                                  Mao na massa    Operadores


Semelhanca
        ¸




Operador de semelhanca
                    ¸
# Operador de semelhanca.
                      ¸
query.filter(User.name.like(’%ed%’))




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   39 / 72
˜
                                  Mao na massa    Operadores


    ´
Contem




Operador de conteudo
                 ´
# Operador IN.
query.filter(User.name.in_([’ed’, 
                            ’wendy’, 
                            ’jack’]))




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   40 / 72
˜
                                 Mao na massa   Operadores


Nulo




Testar campo nulo
                 ´
# Verificando se e nulo.
filter(User.name == None)




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM   CONISLI 2008   41 / 72
˜
                                  Mao na massa       Operadores


    ´
”E”logico




          ´
Operador logico ”E”
# Usando operador AND.
from sqlalchemy import and_
filter(and_(User.name == ’ed’, 
       User.fullname == ’Ed Jones’))

      e ´
# tamb´m e poss´vel chamar filter()/filter_by()
                ı
# v´rias vezes.
   a
filter(User.name == ’ed’).filter(User.fullname == ’Ed Jones’)




 Ramiro Batista da Luz (APyBR)         SQLAlchemy - Python - ORM   CONISLI 2008   42 / 72
˜
                                  Mao na massa    Operadores


     ´
”OU”logico




          ´
Operador logico ”OU”
>>> # Usando o operador or.
>>> from sqlalchemy import or_
>>> q= session.query(User).filter(or_(User.name == ’ed’, 
                                      User.name == ’wendy’))
<sqlalchemy.orm.query.Query object at 0x2286ed0>
>>> q.all()




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   43 / 72
˜
                                  Mao na massa    Operadores


”Match”




Equivalencia
# Match tem efeitos que dependem do banco de dados.
query.filter(User.name.match(’wendy’))




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM   CONISLI 2008   44 / 72
˜
                                    Mao na massa   Receitas alternativas


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM             CONISLI 2008   45 / 72
˜
                                  Mao na massa    Receitas alternativas


Obtendo uma lista




   ´
O metodo all() retorna uma lista
>>> # Lista de objetos com o metodo all()
>>> query = session.query(User).filter( 
                User.name.like(’%ed’)
                ).order_by(User.id)
>>> query.all()
[<User(’ed’,’Ed Jones’, ’f8s7ccs’)>,
 <User(’fred’,’Fred Flinstone’, ’blah’)>]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM             CONISLI 2008   46 / 72
˜
                                  Mao na massa    Receitas alternativas


Primeiro elemento




    ´
O metodo first() aplica um limite de 1 e retorna o primeiro registro do
resultado
>>> # first aplica um limite de 1 com deslocamento 0.
>>> query.first()
<User(’ed’,’Ed Jones’, ’f8s7ccs’)>




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM             CONISLI 2008   47 / 72
˜
                                     Mao na massa   Receitas alternativas


Otendo linha unica
             ´


    ´                                                 ¸˜        ˜
O metodo one() aplica um limite de dois e dispara excecao caso nao
obtenha uma e apenas uma linha
>>>          ¸˜
      # Excecoes s˜o disparadas caso o resultado de one
                   a
>>>   # seja maior que um ou menor que um.
>>>   try:
...        user = query.one()
...   except Exception, e:
...        print e

Multiple rows were found for one()

>>> try:
...      user = query.filter(User.id == 99).one()
... except Exception, e:
...      print e

No row was found for one()




 Ramiro Batista da Luz (APyBR)        SQLAlchemy - Python - ORM             CONISLI 2008   48 / 72
˜
                                  Mao na massa    Receitas alternativas


       ˜
Expressoes SQL




                    ˜
Pode-se usar expressoes SQL
                    ¸˜
>>> # Passando condicoes com sql usando de strings.
>>> for user in session.query(User).filter(quot;id<224quot;).
...                                 order_by(quot;idquot;).all():
...     print user.name




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM             CONISLI 2008   49 / 72
˜
                                  Mao na massa    Receitas alternativas


Parametros SQL




Parametros bind
# Parametros BIND.
>>> session.query(User).
...     filter(quot;id<:value and name=:namequot;).
...     params(value=224, name=’fred’).
...     order_by(User.id).one()

<User(’fred’,’Fred Flinstone’, ’blah’)>




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM             CONISLI 2008   50 / 72
˜
                                    Mao na massa     Receitas alternativas


Comando SQL




                    ´
SQL completo, necessario manter os nomes dos atributos mapeados.
>>>   # Comandos SQL com o m´todo from_statement.
                            e
>>>   # Os nomes das colunas devem ser os mesmos que os
>>>   # nomes usados no mapper.
>>>   session.query(User).from_statement(
...          quot;SELECT * FROM users where name=:namequot;).
...          params(name=’ed’).all()

[<User(’ed’,’Ed Jones’, ’f8s7ccs’)>]




 Ramiro Batista da Luz (APyBR)         SQLAlchemy - Python - ORM             CONISLI 2008   51 / 72
˜
                                    Mao na massa   Relacionamento


Roteiro
1            ¸˜
      Introducao
         Sobre o palestrante
         Sobre a palestra
2     Framework SQLAlchemy
         Conteudo
              ´
3      ˜
      Mao na massa
        Os ingredientes
                 ¸˜
        Preparacao
               ¸˜
        Utilizacao da biblioteca
        Consultando
        Operadores
        Receitas alternativas
        Relacionamento
4     Bibliografia

    Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   52 / 72
˜
                                  Mao na massa    Relacionamento


    ¸˜
Relacao declarativa


                   ¸˜
Especificando a relacao de forma declarativa
>>> from sqlalchemy import ForeignKey
>>> from sqlalchemy.orm import relation, backref
>>> class Address(Base):
...     __tablename__ = ’addresses’
...     id = Column(Integer, primary_key=True)
...     email_address = Column(String, nullable=False)
...     user_id = Column(Integer, ForeignKey(’users.id’))
...
...     user = relation(User, backref=backref(’addresses’, 
...                     order_by=id))
...
...     def __init__(self, email_address):
...         self.email_address = email_address
...
...     def __repr__(self):
...         return quot;<Address(’%s’)>quot; % self.email_address




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   53 / 72
˜
                                  Mao na massa     Relacionamento


”BackRef”




       ¸˜
Na direcao oposta
                        ¸˜
# A flexibilidade da funcao relation() permite a
        ¸˜
# definicao na classe User.

class User(Base):
    ....
    addresses = relation(Address, order_by=Address.id,
                  backref=quot;userquot;)




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM       CONISLI 2008   54 / 72
˜
                                  Mao na massa       Relacionamento


Aplicando a estrutura




Criando as estruturas no banco
          ¸˜
>>> # Criacao das tabelas no banco.
>>> Base.metadata.create_all(engine)




 Ramiro Batista da Luz (APyBR)         SQLAlchemy - Python - ORM      CONISLI 2008   55 / 72
˜
                                  Mao na massa    Relacionamento


Novo objeto relacionado




         ´      ˜
Novos usuarios nao tem email inicialmente
>>> # Novo objeto sem enderecos de email.
                            ¸
>>> jack = User(’jack’, ’Jack Bean’, ’gjffdd’)
>>> jack.addresses
[]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   56 / 72
˜
                                 Mao na massa   Relacionamento


Lista de enderecos
               ¸




Podemos adicionar uma lista diretamente
# Acessando o relacionamento.
>>> jack.addresses
[<Address(’jack@google.com’)>,
 <Address(’j25@yahoo.com’)>]




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   57 / 72
˜
                                  Mao na massa       Relacionamento


                          ¸˜
Visibilidade nas duas direcoes




                               ˜                        ¸˜
Relacionamentos bidirecionais sao vis´veis nas duas direcoes
                                     ı
>>> # Usu´rio possui enderecos e enderecos s˜o de algum usu´rio.
         a                 ¸           ¸    a              a
>>> jack.addresses[1]
<Address(’j25@yahoo.com’)>

>>> jack.addresses[1].user
<User(’jack’,’Jack Bean’, ’gjffdd’)>




 Ramiro Batista da Luz (APyBR)         SQLAlchemy - Python - ORM      CONISLI 2008   58 / 72
˜
                                    Mao na massa   Relacionamento


”Commitando”




                   ¸˜
Salvando as informacoes no banco
>>> # Persistindo o novo usu´rio.
                            a
>>> session.add(jack)
>>> session.commit()




 Ramiro Batista da Luz (APyBR)       SQLAlchemy - Python - ORM      CONISLI 2008   59 / 72
˜
                                  Mao na massa    Relacionamento


Economia de recursos




                       ˜
As consultas ao banco sao feitas sob demanda
>>> # Ao selecionar o usu´rio, o SQL para os enderecos
                         a                         ¸
       a ´
>>> # n˜o e executado.
>>> jack = session.query(User).
...        filter_by(name=’jack’).one()
>>> jack
<User(’jack’,’Jack Bean’, ’gjffdd’)>




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   60 / 72
˜
                                 Mao na massa   Relacionamento


Agora os enderecos
               ¸




    ¸˜
Selecao de acordo com a necessidade
# Acessando o relacionamento.
>>> jack.addresses
[<Address(’jack@google.com’)>,
 <Address(’j25@yahoo.com’)>]




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   61 / 72
˜
                                  Mao na massa    Relacionamento


Economia de acessos



              ´
Se for o caso e poss´vel buscar tudo antes.(eagerload)
                    ı
>>> # Com eagerload os enderecos s˜o obtidos juntamente com o
                             ¸    a
>>> # usu´rio.
         a
>>> from sqlalchemy.orm import eagerload
>>> jack = session.query(User).options( 
...                   eagerload(’addresses’)).
...                   filter_by(name=’jack’).one()
>>> jack
<User(’jack’,’Jack Bean’, ’gjffdd’)>

>>> jack.addresses
[<Address(’jack@google.com’)>,
 <Address(’j25@yahoo.com’)>]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   62 / 72
˜
                                  Mao na massa      Relacionamento


             ¸˜
Juntando relacoes




Inner join, usando filter()
>>> # Usando filtros generativamente para o join.
>>> for u, a in session.query(User, Address).
...   filter(User.id==Address.user_id).filter(
...   Address.email_address==’jack@google.com’).
...   all():
...     print u, a
<User(’jack’,’Jack Bean’, ’gjffdd’)>
<Address(’jack@google.com’)>




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM        CONISLI 2008   63 / 72
˜
                                  Mao na massa    Relacionamento


Relacionando com join




            ¸˜
Usando a funcao join()
>>> # Usando join com o m´todo select_from.
                          e
>>> from sqlalchemy.orm import join
>>> session.query(User).select_from(join(User,
...    Address)).filter(
...    Address.email_address==’jack@google.com’).
...    all()
[<User(’jack’,’Jack Bean’, ’gjffdd’)>]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   64 / 72
˜
                                  Mao na massa    Relacionamento


Clausula ”on”




´
E poss´vel indicar a clausula on do join
      ı
       ¸˜
# condicao explic´ta
                 ı
join(User, Address, User.id==Address.user_id)
                 ¸˜
# Especif´ca relacao da esquerda para direita
         ı
join(User, Address, User.addresses)
# o mesmo, usando uma string
join(User, Address, ’addresses’)




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   65 / 72
˜
                                  Mao na massa    Relacionamento


join em query




Aplicando o join() em objetos Query
>>> # Aplicando o join no objeto Query.
>>> session.query(User).join(User.addresses).
...     filter(Address.email_address==’jack@google.com’).all()
[<User(’jack’,’Jack Bean’, ’gjffdd’)>]




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   66 / 72
˜
                                  Mao na massa    Relacionamento


”Target”




                           ¸˜
Explicitando o alvo da ligacao
# Join especificando a propriedade alvo do relacionamento.
session.query(User).join((Address, User.addresses))




 Ramiro Batista da Luz (APyBR)      SQLAlchemy - Python - ORM      CONISLI 2008   67 / 72
˜
                                 Mao na massa   Relacionamento


     ˆ
Referencias




      Python - http://www.python.org
      PythonBrasil - http://www.pythonbrasil.com.br
      GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
      SQLAlchemy - http://www.sqlalchemy.org




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   68 / 72
˜
                                 Mao na massa   Relacionamento


     ˆ
Referencias




      Python - http://www.python.org
      PythonBrasil - http://www.pythonbrasil.com.br
      GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
      SQLAlchemy - http://www.sqlalchemy.org




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   68 / 72
˜
                                 Mao na massa   Relacionamento


     ˆ
Referencias




      Python - http://www.python.org
      PythonBrasil - http://www.pythonbrasil.com.br
      GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
      SQLAlchemy - http://www.sqlalchemy.org




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   68 / 72
˜
                                 Mao na massa   Relacionamento


     ˆ
Referencias




      Python - http://www.python.org
      PythonBrasil - http://www.pythonbrasil.com.br
      GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr
      SQLAlchemy - http://www.sqlalchemy.org




 Ramiro Batista da Luz (APyBR)    SQLAlchemy - Python - ORM      CONISLI 2008   68 / 72
´
                                      Sumario


   ´
Sumario




             ¸˜
      Introducao
             Sobre o palestrante
             Sobre a palestra
      Caracter´sticas - SQLAlchemy
                ı
             ¸˜
      Utilizacao




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   69 / 72
´
                                      Sumario


   ´
Sumario




             ¸˜
      Introducao
             Sobre o palestrante
             Sobre a palestra
      Caracter´sticas - SQLAlchemy
                ı
             ¸˜
      Utilizacao




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   69 / 72
´
                                      Sumario


   ´
Sumario




             ¸˜
      Introducao
             Sobre o palestrante
             Sobre a palestra
      Caracter´sticas - SQLAlchemy
                ı
             ¸˜
      Utilizacao




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   69 / 72
´
                                      Sumario


   ´
Sumario




             ¸˜
      Introducao
             Sobre o palestrante
             Sobre a palestra
      Caracter´sticas - SQLAlchemy
                ı
             ¸˜
      Utilizacao




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   69 / 72
´
                                      Sumario


   ´
Sumario




             ¸˜
      Introducao
             Sobre o palestrante
             Sobre a palestra
      Caracter´sticas - SQLAlchemy
                ı
             ¸˜
      Utilizacao




 Ramiro Batista da Luz (APyBR)     SQLAlchemy - Python - ORM   CONISLI 2008   69 / 72
Bibliografia


Bibliografia



[1] SetupTools1.
    http://peak.telecommunity.com/DevCenter/setuptools, 3
    September 2008.
[2] SetupTools2.
    http://peak.telecommunity.com/DevCenter/EasyInstall#
    installation-instructions, 3 September 2008.
[3] WikiPed1.
    http://pt.wikipedia.org/wiki/Dados, 2 September 2008.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   70 / 72
Bibliografia


Bibliografia



[1] SetupTools1.
    http://peak.telecommunity.com/DevCenter/setuptools, 3
    September 2008.
[2] SetupTools2.
    http://peak.telecommunity.com/DevCenter/EasyInstall#
    installation-instructions, 3 September 2008.
[3] WikiPed1.
    http://pt.wikipedia.org/wiki/Dados, 2 September 2008.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   70 / 72
Bibliografia


Bibliografia



[1] SetupTools1.
    http://peak.telecommunity.com/DevCenter/setuptools, 3
    September 2008.
[2] SetupTools2.
    http://peak.telecommunity.com/DevCenter/EasyInstall#
    installation-instructions, 3 September 2008.
[3] WikiPed1.
    http://pt.wikipedia.org/wiki/Dados, 2 September 2008.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   70 / 72
Bibliografia


Agradecimentos




                        ¸˜                    ˆ
      ASCAM-PR, Associacao de Servidores de Camaras Municipais
               ´
      da Parana.
                         ¸˜                             ˆ
      ABRASCAM, Associacao Brasileira de Servidores de Camaras
      Municipais.
                                                ¸˜
      Comunidade Python Brasil e APyBR, Associacao Python Brasil.
      Comunidade de Software Livre.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   71 / 72
Bibliografia


Agradecimentos




                        ¸˜                    ˆ
      ASCAM-PR, Associacao de Servidores de Camaras Municipais
               ´
      da Parana.
                         ¸˜                             ˆ
      ABRASCAM, Associacao Brasileira de Servidores de Camaras
      Municipais.
                                                ¸˜
      Comunidade Python Brasil e APyBR, Associacao Python Brasil.
      Comunidade de Software Livre.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   71 / 72
Bibliografia


Agradecimentos




                        ¸˜                    ˆ
      ASCAM-PR, Associacao de Servidores de Camaras Municipais
               ´
      da Parana.
                         ¸˜                             ˆ
      ABRASCAM, Associacao Brasileira de Servidores de Camaras
      Municipais.
                                                ¸˜
      Comunidade Python Brasil e APyBR, Associacao Python Brasil.
      Comunidade de Software Livre.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   71 / 72
Bibliografia


Agradecimentos




                        ¸˜                    ˆ
      ASCAM-PR, Associacao de Servidores de Camaras Municipais
               ´
      da Parana.
                         ¸˜                             ˆ
      ABRASCAM, Associacao Brasileira de Servidores de Camaras
      Municipais.
                                                ¸˜
      Comunidade Python Brasil e APyBR, Associacao Python Brasil.
      Comunidade de Software Livre.




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   71 / 72
Bibliografia


       ˜
Conclusao




        ´                                 ´
Python e uma linguagem muito bacana, facil de aprender, poderosa e
produtiva, aliada a gama de bibliotecas e frameworks torna-se hoje um
conhecimento muito valioso, empresas como Nokia, Globo e Google
procuram profissionais com esse conhecimento pelo mundo todo.
                                                           ´
Usar essa tecnologia para trabalhar com bancos de dados e bem
                               ¸˜
tranquilo e possui inumeras opcoes.
                     ´




 Ramiro Batista da Luz (APyBR)   SQLAlchemy - Python - ORM   CONISLI 2008   72 / 72

Mais conteúdo relacionado

Mais procurados

OCL: Object Constraint Language
OCL: Object Constraint LanguageOCL: Object Constraint Language
OCL: Object Constraint Languageelliando dias
 
Lógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dadosLógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dadosWesley R. Bezerra
 
Construção de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterConstrução de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterMarcos Castro
 
Sistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoSistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitoslicardino
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaHelder Lopes
 
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)Sistemas Operacionais - Aula 01 (Conceitos básicos de so)
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)Leinylson Fontinele
 
Aula 2 - Economia
Aula 2 - EconomiaAula 2 - Economia
Aula 2 - EconomiaCNA
 
Introdução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de DadosIntrodução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de Dadosinfo_cimol
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introduçãoCleber Ramos
 

Mais procurados (20)

Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
OCL: Object Constraint Language
OCL: Object Constraint LanguageOCL: Object Constraint Language
OCL: Object Constraint Language
 
Aula 3 - Introdução a cloud computing
Aula 3 - Introdução a cloud computingAula 3 - Introdução a cloud computing
Aula 3 - Introdução a cloud computing
 
Modelagem de dados
Modelagem de dados Modelagem de dados
Modelagem de dados
 
Lógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dadosLógica de Programação - Entrada/saída de dados
Lógica de Programação - Entrada/saída de dados
 
Construção de interfaces gráficas com Tkinter
Construção de interfaces gráficas com TkinterConstrução de interfaces gráficas com Tkinter
Construção de interfaces gráficas com Tkinter
 
Sistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - ApresentaçãoSistemas Computacionais - Aula 01 - Apresentação
Sistemas Computacionais - Aula 01 - Apresentação
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitos
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
02 algoritmo
02   algoritmo02   algoritmo
02 algoritmo
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplinaFundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
Fundamentos de Sistemas Operacionais - Aula 1 - Introdução à disciplina
 
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)Sistemas Operacionais - Aula 01 (Conceitos básicos de so)
Sistemas Operacionais - Aula 01 (Conceitos básicos de so)
 
Aula 2 - Economia
Aula 2 - EconomiaAula 2 - Economia
Aula 2 - Economia
 
Visual g apostila de algoritmo
Visual g   apostila de algoritmoVisual g   apostila de algoritmo
Visual g apostila de algoritmo
 
Introdução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de DadosIntrodução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de Dados
 
Aula 04 software
Aula 04 softwareAula 04 software
Aula 04 software
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Sistema operacional introdução
Sistema operacional introduçãoSistema operacional introdução
Sistema operacional introdução
 

Destaque

Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Mauricio Volkweis Astiazara
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernateAgenor Neto
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateZarathon Maia
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersJérôme Petazzoni
 

Destaque (7)

SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
Sistema Imunológico Artificial para Predição de Fraudes e Furtos de Energia E...
 
Banco de Dados Relacional Estendido
Banco de Dados Relacional EstendidoBanco de Dados Relacional Estendido
Banco de Dados Relacional Estendido
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+Hibernate
 
Python 04
Python 04Python 04
Python 04
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things Containers
 

Semelhante a SQLAlchemy - A magia do mapeamento objeto relacional.

Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Ramiro Luz
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
Open ldap criando e explorando um overlay
Open ldap   criando e explorando um overlayOpen ldap   criando e explorando um overlay
Open ldap criando e explorando um overlayMarcelo Fleury
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Thiago Rondon
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPklaussilveira
 
Orca, Python e Acessibilidade
Orca, Python e AcessibilidadeOrca, Python e Acessibilidade
Orca, Python e AcessibilidadeRamiro Luz
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCMayara Fernandes
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
O que podemos fazer com Python?
O que podemos fazer com Python?O que podemos fazer com Python?
O que podemos fazer com Python?Izabela Guerreiro
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e FuturoFreedom DayMS
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosEvaldo Junior
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias IncluídasJonh Edson
 

Semelhante a SQLAlchemy - A magia do mapeamento objeto relacional. (20)

Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014Python, por onde começar? @FTSL2014
Python, por onde começar? @FTSL2014
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
Open ldap criando e explorando um overlay
Open ldap   criando e explorando um overlayOpen ldap   criando e explorando um overlay
Open ldap criando e explorando um overlay
 
Evolucao php2
Evolucao php2Evolucao php2
Evolucao php2
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHP
 
Seminário: PHP
Seminário: PHPSeminário: PHP
Seminário: PHP
 
Apresentação do grupo PHPMS
Apresentação do grupo PHPMSApresentação do grupo PHPMS
Apresentação do grupo PHPMS
 
Orca, Python e Acessibilidade
Orca, Python e AcessibilidadeOrca, Python e Acessibilidade
Orca, Python e Acessibilidade
 
Automação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SCAutomação de Testes com Robot Framework - GUTS-SC
Automação de Testes com Robot Framework - GUTS-SC
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
O que podemos fazer com Python?
O que podemos fazer com Python?O que podemos fazer com Python?
O que podemos fazer com Python?
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Python e suas aplicações
Python e suas aplicaçõesPython e suas aplicações
Python e suas aplicações
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
A Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In SantosA Evolução do PHP - 4º Dev In Santos
A Evolução do PHP - 4º Dev In Santos
 
Python Com Baterias Incluídas
Python Com Baterias IncluídasPython Com Baterias Incluídas
Python Com Baterias Incluídas
 
PHP 5.3 - Introdução
PHP 5.3 - IntroduçãoPHP 5.3 - Introdução
PHP 5.3 - Introdução
 

Mais de Ramiro Luz

Institutional Website - the longest project of my life
Institutional Website - the longest project of my lifeInstitutional Website - the longest project of my life
Institutional Website - the longest project of my lifeRamiro Luz
 
Plone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsPlone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsRamiro Luz
 
Portal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsPortal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsRamiro Luz
 
Para que serve o Python
Para que serve o PythonPara que serve o Python
Para que serve o PythonRamiro Luz
 
Minerando dados com Python
Minerando dados com PythonMinerando dados com Python
Minerando dados com PythonRamiro Luz
 
Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Ramiro Luz
 
Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Ramiro Luz
 
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Ramiro Luz
 
Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Ramiro Luz
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com PloneRamiro Luz
 
Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Ramiro Luz
 
Python 3, patterns and indioms
Python 3, patterns and indiomsPython 3, patterns and indioms
Python 3, patterns and indiomsRamiro Luz
 
Dojo de Programação
Dojo de ProgramaçãoDojo de Programação
Dojo de ProgramaçãoRamiro Luz
 
Teaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleTeaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleRamiro Luz
 
Usando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDUsando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDRamiro Luz
 
Sabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonSabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonRamiro Luz
 
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Ramiro Luz
 
Apresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionApresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionRamiro Luz
 
python-agil-IVEnGitec
python-agil-IVEnGitecpython-agil-IVEnGitec
python-agil-IVEnGitecRamiro Luz
 
Testes de Unidade para C++
Testes de Unidade para C++Testes de Unidade para C++
Testes de Unidade para C++Ramiro Luz
 

Mais de Ramiro Luz (20)

Institutional Website - the longest project of my life
Institutional Website - the longest project of my lifeInstitutional Website - the longest project of my life
Institutional Website - the longest project of my life
 
Plone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizationsPlone Portal, cultural and economic challenges in public organizations
Plone Portal, cultural and economic challenges in public organizations
 
Portal Modelo - Plone for Parliaments
Portal Modelo - Plone for ParliamentsPortal Modelo - Plone for Parliaments
Portal Modelo - Plone for Parliaments
 
Para que serve o Python
Para que serve o PythonPara que serve o Python
Para que serve o Python
 
Minerando dados com Python
Minerando dados com PythonMinerando dados com Python
Minerando dados com Python
 
Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.Python, por onde começar - Semana Technológica UTFPR 2015.
Python, por onde começar - Semana Technológica UTFPR 2015.
 
Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015Workshop de introdução ao python - TADS 2015
Workshop de introdução ao python - TADS 2015
 
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
 
Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015Não se repita - Django Generic Views - FLISOL Curitiba 2015
Não se repita - Django Generic Views - FLISOL Curitiba 2015
 
Criando testes com Plone
Criando testes com PloneCriando testes com Plone
Criando testes com Plone
 
Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?Flisol 2014 - Python, por onde começar?
Flisol 2014 - Python, por onde começar?
 
Python 3, patterns and indioms
Python 3, patterns and indiomsPython 3, patterns and indioms
Python 3, patterns and indioms
 
Dojo de Programação
Dojo de ProgramaçãoDojo de Programação
Dojo de Programação
 
Teaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo StyleTeaching TDD, the Coding Dojo Style
Teaching TDD, the Coding Dojo Style
 
Usando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDDUsando Dojos de Programação para o Ensino de TDD
Usando Dojos de Programação para o Ensino de TDD
 
Sabores do desenvolvimento web com Python
Sabores do desenvolvimento web com PythonSabores do desenvolvimento web com Python
Sabores do desenvolvimento web com Python
 
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
Usando Dojos de Programação para o Ensino e Disseminação de Práticas Ágeis: r...
 
Apresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoptionApresentação resumo de artigo Limiting Factor of TDD adoption
Apresentação resumo de artigo Limiting Factor of TDD adoption
 
python-agil-IVEnGitec
python-agil-IVEnGitecpython-agil-IVEnGitec
python-agil-IVEnGitec
 
Testes de Unidade para C++
Testes de Unidade para C++Testes de Unidade para C++
Testes de Unidade para C++
 

SQLAlchemy - A magia do mapeamento objeto relacional.

  • 1. A magia do mapeamento objeto relacional com SQLAlchemy Python ORM(Mapeamento objeto relacional) Ramiro Luz2 1 Associacao ¸˜ Python Brasil - APyBR 2 Comunidade ´ de usuarios Python Brasileira ´ Grupo de Usuarios Python do Parana´ ˜ Congresso Internacional de Software Livre, Sao Paulo-SP, 2008 Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 1 / 72
  • 2. Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 2 / 72
  • 3. Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 2 / 72
  • 4. Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 2 / 72
  • 5. Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 2 / 72
  • 6. ¸˜ Introducao Sobre o palestrante Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 3 / 72
  • 7. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 8. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 9. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 10. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 11. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 12. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 13. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 14. ¸˜ Introducao Sobre o palestrante ´ Historia de programador ´ cp200, fitas magneticas, gravadores e programas em basic. Turbo Pascal e Clipper Summer. A busca, VisualDbase(DBase5), Visual FoxPro, Visual Basic, Java, Delphi, PHP e finalmente a linguagem Python. ´ Proximas tentativas, Haskell, Smalltalk, Common Lisp. Comunidades ´ ´ Grupo de usuarios Debian do Parana, GUD-BR-PR http://www.debian-pr.org/ ´ ´ Grupo de usuarios da linguagem Python do Parana, GruPy-PR http://www.pythonbrasil.com.br/moin.cgi/GrupyPr ¸˜ Membro suplente do Conselho Deliberativo da Associacao Python Brasil, http://associacao.pythonbrasil.org/ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 4 / 72
  • 15. ¸˜ Introducao Sobre a palestra Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 5 / 72
  • 16. ¸˜ Introducao Sobre a palestra Conceitos ¸˜ Programacao Bancos de dados ¸˜ Orientacao a objetos ´ Termos tecnicos usados na palestra. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 6 / 72
  • 17. ¸˜ Introducao Sobre a palestra Conceitos ¸˜ Programacao Bancos de dados ¸˜ Orientacao a objetos ´ Termos tecnicos usados na palestra. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 6 / 72
  • 18. ¸˜ Introducao Sobre a palestra Conceitos ¸˜ Programacao Bancos de dados ¸˜ Orientacao a objetos ´ Termos tecnicos usados na palestra. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 6 / 72
  • 19. ¸˜ Introducao Sobre a palestra Conceitos ¸˜ Programacao Bancos de dados ¸˜ Orientacao a objetos ´ Termos tecnicos usados na palestra. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 6 / 72
  • 20. Framework SQLAlchemy Conteudo ´ Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 7 / 72
  • 21. Framework SQLAlchemy Conteudo ´ A linguagem Python ¸˜ ˆ Linguagem de programacao dinamica e interpretada de facil ´ aprendizado. Usada em uma grande variedade de dom´nios de aplicacoes, ı ¸˜ Web, processamento de email, tratamento de html e xml, acesso ¸˜ ´ a banco de dados, aplicacoes para rede, interfaces graficas, ¸˜ ¸˜ computacao cient´fica, jogos, educacao, entre outras. ı Clareza da sintaxe, Identacao ¸ ˜ obrigatoria, pequena quantidade de ´ ˜ ´ palavras reservadas, as bibliotecas sao muitos faceis de usar. ´ Python possue uma grande variedade de bibliotecas, alem da ˜ biblioteca padrao a linguagem conta com uma enorme variedade de bibliotecas encontradas no ´ndice de pacotes python, ı http://pypi.python.org/pypi Linguagem com uma produtividade muito grande, tarefas ´ completas com poucas linhas, codigo simples, facilidade de ¸˜ manutencao. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 8 / 72
  • 22. Framework SQLAlchemy Conteudo ´ A linguagem Python ¸˜ ˆ Linguagem de programacao dinamica e interpretada de facil ´ aprendizado. Usada em uma grande variedade de dom´nios de aplicacoes, ı ¸˜ Web, processamento de email, tratamento de html e xml, acesso ¸˜ ´ a banco de dados, aplicacoes para rede, interfaces graficas, ¸˜ ¸˜ computacao cient´fica, jogos, educacao, entre outras. ı Clareza da sintaxe, Identacao ¸ ˜ obrigatoria, pequena quantidade de ´ ˜ ´ palavras reservadas, as bibliotecas sao muitos faceis de usar. ´ Python possue uma grande variedade de bibliotecas, alem da ˜ biblioteca padrao a linguagem conta com uma enorme variedade de bibliotecas encontradas no ´ndice de pacotes python, ı http://pypi.python.org/pypi Linguagem com uma produtividade muito grande, tarefas ´ completas com poucas linhas, codigo simples, facilidade de ¸˜ manutencao. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 8 / 72
  • 23. Framework SQLAlchemy Conteudo ´ A linguagem Python ¸˜ ˆ Linguagem de programacao dinamica e interpretada de facil ´ aprendizado. Usada em uma grande variedade de dom´nios de aplicacoes, ı ¸˜ Web, processamento de email, tratamento de html e xml, acesso ¸˜ ´ a banco de dados, aplicacoes para rede, interfaces graficas, ¸˜ ¸˜ computacao cient´fica, jogos, educacao, entre outras. ı Clareza da sintaxe, Identacao ¸ ˜ obrigatoria, pequena quantidade de ´ ˜ ´ palavras reservadas, as bibliotecas sao muitos faceis de usar. ´ Python possue uma grande variedade de bibliotecas, alem da ˜ biblioteca padrao a linguagem conta com uma enorme variedade de bibliotecas encontradas no ´ndice de pacotes python, ı http://pypi.python.org/pypi Linguagem com uma produtividade muito grande, tarefas ´ completas com poucas linhas, codigo simples, facilidade de ¸˜ manutencao. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 8 / 72
  • 24. Framework SQLAlchemy Conteudo ´ A linguagem Python ¸˜ ˆ Linguagem de programacao dinamica e interpretada de facil ´ aprendizado. Usada em uma grande variedade de dom´nios de aplicacoes, ı ¸˜ Web, processamento de email, tratamento de html e xml, acesso ¸˜ ´ a banco de dados, aplicacoes para rede, interfaces graficas, ¸˜ ¸˜ computacao cient´fica, jogos, educacao, entre outras. ı Clareza da sintaxe, Identacao ¸ ˜ obrigatoria, pequena quantidade de ´ ˜ ´ palavras reservadas, as bibliotecas sao muitos faceis de usar. ´ Python possue uma grande variedade de bibliotecas, alem da ˜ biblioteca padrao a linguagem conta com uma enorme variedade de bibliotecas encontradas no ´ndice de pacotes python, ı http://pypi.python.org/pypi Linguagem com uma produtividade muito grande, tarefas ´ completas com poucas linhas, codigo simples, facilidade de ¸˜ manutencao. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 8 / 72
  • 25. Framework SQLAlchemy Conteudo ´ A linguagem Python ¸˜ ˆ Linguagem de programacao dinamica e interpretada de facil ´ aprendizado. Usada em uma grande variedade de dom´nios de aplicacoes, ı ¸˜ Web, processamento de email, tratamento de html e xml, acesso ¸˜ ´ a banco de dados, aplicacoes para rede, interfaces graficas, ¸˜ ¸˜ computacao cient´fica, jogos, educacao, entre outras. ı Clareza da sintaxe, Identacao ¸ ˜ obrigatoria, pequena quantidade de ´ ˜ ´ palavras reservadas, as bibliotecas sao muitos faceis de usar. ´ Python possue uma grande variedade de bibliotecas, alem da ˜ biblioteca padrao a linguagem conta com uma enorme variedade de bibliotecas encontradas no ´ndice de pacotes python, ı http://pypi.python.org/pypi Linguagem com uma produtividade muito grande, tarefas ´ completas com poucas linhas, codigo simples, facilidade de ¸˜ manutencao. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 8 / 72
  • 26. Framework SQLAlchemy Conteudo ´ Bancos de dados relacionais ´ Dados: Registros ou ind´cios relacionaveis a alguma entidade ou ı evento.[3]. Dados organizados produzem informaes. Sistemas de Gerenciamento de Bancos de Dados. Modelos: Modelo Orientado a Objetos, Modelos Navegacionais, ´ divididos em Modelo Hierarquico e Modelo em Redes. Modelo relacional: Armazenar dados em tabelas, organizadas em ¸˜ linhas e colunas. Tabelas podem ter relacoes entre si. ˜ Cartoes perfurados, arquivos texto, arquivos estruturados, sistemas de gerenciamento de bancos. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 9 / 72
  • 27. Framework SQLAlchemy Conteudo ´ Bancos de dados relacionais ´ Dados: Registros ou ind´cios relacionaveis a alguma entidade ou ı evento.[3]. Dados organizados produzem informaes. Sistemas de Gerenciamento de Bancos de Dados. Modelos: Modelo Orientado a Objetos, Modelos Navegacionais, ´ divididos em Modelo Hierarquico e Modelo em Redes. Modelo relacional: Armazenar dados em tabelas, organizadas em ¸˜ linhas e colunas. Tabelas podem ter relacoes entre si. ˜ Cartoes perfurados, arquivos texto, arquivos estruturados, sistemas de gerenciamento de bancos. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 9 / 72
  • 28. Framework SQLAlchemy Conteudo ´ Bancos de dados relacionais ´ Dados: Registros ou ind´cios relacionaveis a alguma entidade ou ı evento.[3]. Dados organizados produzem informaes. Sistemas de Gerenciamento de Bancos de Dados. Modelos: Modelo Orientado a Objetos, Modelos Navegacionais, ´ divididos em Modelo Hierarquico e Modelo em Redes. Modelo relacional: Armazenar dados em tabelas, organizadas em ¸˜ linhas e colunas. Tabelas podem ter relacoes entre si. ˜ Cartoes perfurados, arquivos texto, arquivos estruturados, sistemas de gerenciamento de bancos. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 9 / 72
  • 29. Framework SQLAlchemy Conteudo ´ Bancos de dados relacionais ´ Dados: Registros ou ind´cios relacionaveis a alguma entidade ou ı evento.[3]. Dados organizados produzem informaes. Sistemas de Gerenciamento de Bancos de Dados. Modelos: Modelo Orientado a Objetos, Modelos Navegacionais, ´ divididos em Modelo Hierarquico e Modelo em Redes. Modelo relacional: Armazenar dados em tabelas, organizadas em ¸˜ linhas e colunas. Tabelas podem ter relacoes entre si. ˜ Cartoes perfurados, arquivos texto, arquivos estruturados, sistemas de gerenciamento de bancos. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 9 / 72
  • 30. Framework SQLAlchemy Conteudo ´ Bancos de dados relacionais ´ Dados: Registros ou ind´cios relacionaveis a alguma entidade ou ı evento.[3]. Dados organizados produzem informaes. Sistemas de Gerenciamento de Bancos de Dados. Modelos: Modelo Orientado a Objetos, Modelos Navegacionais, ´ divididos em Modelo Hierarquico e Modelo em Redes. Modelo relacional: Armazenar dados em tabelas, organizadas em ¸˜ linhas e colunas. Tabelas podem ter relacoes entre si. ˜ Cartoes perfurados, arquivos texto, arquivos estruturados, sistemas de gerenciamento de bancos. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 9 / 72
  • 31. Framework SQLAlchemy Conteudo ´ ¸˜ Orientacao a objetos ¸˜ ´ ¸˜ Evolucao das tecnicas: Programacao estruturada - estruturada modular - orientada a objetos. ¸˜ Orientacao a objetos embutida na linguagem Python, Veja o exemplo: >>> print quot;testequot;.upper() TESTE ´ ´ A constante string ”teste”ja possui metodos de string, como ”upper”. Dados relacionais(linhas e colunas) X Estruturas e elementos das ¸˜ linguagens de programacao. ¸˜ Banco de dados + Orientacao a objetos -> Mapeamento objeto relacional. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 10 / 72
  • 32. Framework SQLAlchemy Conteudo ´ ¸˜ Orientacao a objetos ¸˜ ´ ¸˜ Evolucao das tecnicas: Programacao estruturada - estruturada modular - orientada a objetos. ¸˜ Orientacao a objetos embutida na linguagem Python, Veja o exemplo: >>> print quot;testequot;.upper() TESTE ´ ´ A constante string ”teste”ja possui metodos de string, como ”upper”. Dados relacionais(linhas e colunas) X Estruturas e elementos das ¸˜ linguagens de programacao. ¸˜ Banco de dados + Orientacao a objetos -> Mapeamento objeto relacional. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 10 / 72
  • 33. Framework SQLAlchemy Conteudo ´ ¸˜ Orientacao a objetos ¸˜ ´ ¸˜ Evolucao das tecnicas: Programacao estruturada - estruturada modular - orientada a objetos. ¸˜ Orientacao a objetos embutida na linguagem Python, Veja o exemplo: >>> print quot;testequot;.upper() TESTE ´ ´ A constante string ”teste”ja possui metodos de string, como ”upper”. Dados relacionais(linhas e colunas) X Estruturas e elementos das ¸˜ linguagens de programacao. ¸˜ Banco de dados + Orientacao a objetos -> Mapeamento objeto relacional. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 10 / 72
  • 34. Framework SQLAlchemy Conteudo ´ ¸˜ Orientacao a objetos ¸˜ ´ ¸˜ Evolucao das tecnicas: Programacao estruturada - estruturada modular - orientada a objetos. ¸˜ Orientacao a objetos embutida na linguagem Python, Veja o exemplo: >>> print quot;testequot;.upper() TESTE ´ ´ A constante string ”teste”ja possui metodos de string, como ”upper”. Dados relacionais(linhas e colunas) X Estruturas e elementos das ¸˜ linguagens de programacao. ¸˜ Banco de dados + Orientacao a objetos -> Mapeamento objeto relacional. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 10 / 72
  • 35. Framework SQLAlchemy Conteudo ´ Frameworks Arcabouco, que pode ser definido como: Esboco, delineamento ¸ ¸ ¸˜ inicial. Esqueleto. Madeiramento de uma construcao. Estrutura ´ ¸˜ que da suporte para um projeto, organismo ou construcao maior. ´ ´ Na informatica esse termo e usado para descrever uma estrutura ¸˜ ¸˜ a ser usada na construcao e organizacao de sistemas. ¸˜ Um framework fornece bibliotecas e funcoes que ajudam o programador no desenvolvimento organizado de projetos maiores. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 11 / 72
  • 36. Framework SQLAlchemy Conteudo ´ Frameworks Arcabouco, que pode ser definido como: Esboco, delineamento ¸ ¸ ¸˜ inicial. Esqueleto. Madeiramento de uma construcao. Estrutura ´ ¸˜ que da suporte para um projeto, organismo ou construcao maior. ´ ´ Na informatica esse termo e usado para descrever uma estrutura ¸˜ ¸˜ a ser usada na construcao e organizacao de sistemas. ¸˜ Um framework fornece bibliotecas e funcoes que ajudam o programador no desenvolvimento organizado de projetos maiores. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 11 / 72
  • 37. Framework SQLAlchemy Conteudo ´ Frameworks Arcabouco, que pode ser definido como: Esboco, delineamento ¸ ¸ ¸˜ inicial. Esqueleto. Madeiramento de uma construcao. Estrutura ´ ¸˜ que da suporte para um projeto, organismo ou construcao maior. ´ ´ Na informatica esse termo e usado para descrever uma estrutura ¸˜ ¸˜ a ser usada na construcao e organizacao de sistemas. ¸˜ Um framework fornece bibliotecas e funcoes que ajudam o programador no desenvolvimento organizado de projetos maiores. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 11 / 72
  • 38. ˜ Mao na massa Os ingredientes Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 12 / 72
  • 39. ˜ Mao na massa Os ingredientes ¸˜ Instalacao Assim como a maioria dos programas feitos com a linguagem ` ´ Python a maneira de instalar a partir dos fontes e descompactar e ´ executar dentro do diretorio o comando: # python setup.py install ¸˜ Em distribuicoes derivadas do debian o seguinte comando pode ser executado: # aptitude install python-sqlalchemy python-sqlalchemy-doc ´ ¸˜ E tambem usando a ferramenta setuptools[1], instalacao[2]. # easy install SQLAlchemy Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 13 / 72
  • 40. ˜ Mao na massa Os ingredientes ¸˜ Instalacao Assim como a maioria dos programas feitos com a linguagem ` ´ Python a maneira de instalar a partir dos fontes e descompactar e ´ executar dentro do diretorio o comando: # python setup.py install ¸˜ Em distribuicoes derivadas do debian o seguinte comando pode ser executado: # aptitude install python-sqlalchemy python-sqlalchemy-doc ´ ¸˜ E tambem usando a ferramenta setuptools[1], instalacao[2]. # easy install SQLAlchemy Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 13 / 72
  • 41. ˜ Mao na massa Os ingredientes ¸˜ Instalacao Assim como a maioria dos programas feitos com a linguagem ` ´ Python a maneira de instalar a partir dos fontes e descompactar e ´ executar dentro do diretorio o comando: # python setup.py install ¸˜ Em distribuicoes derivadas do debian o seguinte comando pode ser executado: # aptitude install python-sqlalchemy python-sqlalchemy-doc ´ ¸˜ E tambem usando a ferramenta setuptools[1], instalacao[2]. # easy install SQLAlchemy Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 13 / 72
  • 42. ˜ Mao na massa ¸˜ Preparacao Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 14 / 72
  • 43. ˜ Mao na massa ¸˜ Preparacao Verso ˜ Obtendo a versao da biblioteca >>> # Acessando a propriedade __version__ obtemos uma >>> # string com a vers˜o da biblioteca instalada. a >>> import sqlalchemy >>> sqlalchemy.__version__ ’0.5.0’ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 15 / 72
  • 44. ˜ Mao na massa ¸˜ Preparacao ˜ Conexao ´ ´ Conectando um banco de dados sqllite temporario, na memoria do computador >>> ` # Conectando a um banco de dados sqllite tempor´rio, a >>> # na memoria do computador. >>> from sqlalchemy import create_engine >>> # postgres >>> pg_db = create_engine(’postgres://scott:tiger@localhost:5432/mydatabase’) >>> # sqlite (note the four slashes for an absolute path) >>> sqlite_db = create_engine(’sqlite:////absolute/path/to/database.txt’) >>> # mysql >>> mysql_db = create_engine(’mysql://localhost/foo’) >>> # sqllite em mem´ria. o >>> engine = create_engine(’sqlite:///:memory:’, echo=True) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 16 / 72
  • 45. ˜ Mao na massa ¸˜ Preparacao Modelo ¸˜ Definicao da estrutura do banco >>> from sqlalchemy import Table, Column, Integer >>> from sqlalchemy import String, MetaData, ForeignKey >>> metadata = MetaData() >>> users = Table(’users’, metadata, ... Column(’id’, Integer, primary_key=True), ... Column(’name’, String(50)), ... Column(’fullname’, String((50)), ... ) >>> addresses = Table(’addresses’, metadata, ... Column(’id’, Integer, primary_key=True), ... Column(’user_id’, None, ForeignKey(’users.id’)), ... Column(’email_address’, String(100), nullable=False) ... ) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 17 / 72
  • 46. ˜ Mao na massa ¸˜ Preparacao ¸˜ Criacao Criando as tabelas no banco ¸˜ >>> # Criacao das tabelas no banco. >>> metadata.create_all(engine) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 18 / 72
  • 47. ˜ Mao na massa ¸˜ Preparacao As classes Criando uma classe em python >>> class User(object): ... def __init__(self, name, fullname, password): ... self.name = name ... self.fullname = fullname ... self.password = password ... ... # M´todo que quot;representaquot; o objeto, por e ... # exemplo ao usar o comando quot;print objetoquot; ... def __repr__(self): ... return quot;<User(’%s’,’%s’, ’%s’)>quot; % (self.name, ... self.fullname, ... self.password) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 19 / 72
  • 48. ˜ Mao na massa ¸˜ Preparacao O Mapeamento Definido o mapeamento >>> from sqlalchemy.orm import mapper >>> mapper(User, users_table) <Mapper at 0x...; User> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 20 / 72
  • 49. ˜ Mao na massa ¸˜ Utilizacao da biblioteca Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 21 / 72
  • 50. ˜ Mao na massa ¸˜ Utilizacao da biblioteca Criando objetos ¸˜ A criacao de um objeto ¸˜ >>> # A criacao de um novo registro segue os padr˜es de o >>> # objetos python. >>> ed_user = User(’ed’, ’Ed Jones’, ’edspassword’) >>> ed_user.name ’ed’ >>> ed_user.password ’edspassword’ >>> str(ed_user.id) ’None’ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 22 / 72
  • 51. ˜ Mao na massa ¸˜ Utilizacao da biblioteca ˜ Sessoes ˜ Definindo e criando sessoes >>> # Com o comando sessionmaker criamos uma >>> # fabrica de sess˜es. o >>> from sqlalchemy.orm import sessionmaker >>> Session = sessionmaker(bind=engine) >>> session = Session() Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 23 / 72
  • 52. ˜ Mao na massa ¸˜ Utilizacao da biblioteca Persistencia Persistencia no banco ` >>> # Para persistir o objeto ed_user, adicionamos a sess˜o. a >>> # Assim que for necess´rio o comando INSERT ser´ executado. a a >>> ed_user = User(’ed’, ’Ed Jones’, ’edspassword’) >>> session.add(ed_user) >>> our_user = session.query(User). ... filter_by(name=’ed’). ... first() # INSERT e SELECT >>> ed_user is our_user True Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 24 / 72
  • 53. ˜ Mao na massa ¸˜ Utilizacao da biblioteca Salvando lista de objetos ´ Adicionando varios objetos de uma vez # Adicionando uma lista de usu´rios. a >>> session.add_all([ ... User(’wendy’, ’Wendy Williams’, ’foobar’), ... User(’mary’, ’Mary Contrary’, ’xxg527’), ... User(’fred’, ’Fred Flinstone’, ’blah’)]) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 25 / 72
  • 54. ˜ Mao na massa ¸˜ Utilizacao da biblioteca ¸˜ Alteracao ¸˜ ¸˜ Alteracao e confirmacao >>> ed_user.password = ’f8s7ccs’ >>> session.dirty IdentitySet([<User(’ed’,’Ed Jones’, ’f8s7ccs’)>]) >>> session.new IdentitySet([ <User(’wendy’,’Wendy Williams’, ’foobar’)>, <User(’mary’,’Mary Contrary’, ’xxg527’)>, <User(’fred’,’Fred Flinstone’, ’blah’)>]) >>> session.commit() >>> ed_user.id Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 26 / 72
  • 55. ˜ Mao na massa ¸˜ Utilizacao da biblioteca Desfazendo mudancas ¸ Alterando e desfazendo as mudancas ¸ >>> ed_user.name = ’Edwardo’ >>> fake_user = User(’fakeuser’, ’Invalid’, ’12345’) >>> session.add(fake_user) >>> session.query(User).filter(User.name. ... in_([’Edwardo’, ’fakeuser’])).all() [<User(’Edwardo’,’Ed Jones’, ’f8s7ccs’)>, <User(’fakeuser’,’Invalid’, ’12345’)>] >>> session.rollback() >>> ed_user.name >>> fake_user in session False >>> session.query(User).filter(User.name. ... in_([’ed’, ’fakeuser’])).all() [<User(’ed’,’Ed Jones’, ’f8s7ccs’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 27 / 72
  • 56. ˜ Mao na massa Consultando Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 28 / 72
  • 57. ˜ Mao na massa Consultando Obtendo objetos Iterando por objetos ¸˜ >>> # Cada iteracao retorna um objeto usu´rio. a >>> for instance in session.query(User). ... order_by(User.id): ... print instance.name, instance.fullname Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 29 / 72
  • 58. ˜ Mao na massa Consultando Obtendo tuplas Iterando por tuplas ¸˜ >>> # Para cada iteracao as vari´veis recebem os a >>> # valores das propriedades dos registros. >>> for name, fullname in session. query(User.name, User.fullname): ... print name, fullname Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 30 / 72
  • 59. ˜ Mao na massa Consultando Obtendo tuplas com objetos Tuplas com objetos e valores ¸˜ >>> # Cada iteracao retorna uma tupla com os valores das propriedades. >>> for name, fullname in session.query(User.name, User.fullname): ... print name, fullname Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 31 / 72
  • 60. ˜ Mao na massa Consultando ¸˜ Aplicando limites e paginacao Limitando os resultados com fatiamento(slice) de listas >>> # O seguinte slice aplica um limite de 2 e deslocamento 0. >>> for u in session.query(User).order_by(User.id)[1:3]: ... print u >>> # O seguinte slice aplica um limite de 2 e deslocamento 3. >>> for u in session.query(User).order_by(User.id)[3:5]: ... print u >>> # Navegando de dois em dois. >>> for u in session.query(User).order_by(User.id)[::2]: ... print u Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 32 / 72
  • 61. ˜ Mao na massa Consultando Filtrando Com filtros usando argumentos com palavras chave >>> # Os parametros com palavra chave s˜o usados para a >>> # montar o where. >>> for name, in session.query(User.name). ... filter_by(fullname=’Ed Jones’): ... print name Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 33 / 72
  • 62. ˜ Mao na massa Consultando ˜ Usando expressoes ˜ Filtros usando expressoes python >>> # Operadores python podem ser usados com atributos de >>> # classe. >>> for name, in session.query(User.name). ... filter(User.fullname==’Ed Jones’): ... print name Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 34 / 72
  • 63. ˜ Mao na massa Consultando ”Join”encadeando filtros ”filter”retorna objetos query ¸˜ >>> # Cada iteracao retorna um objeto usu´rio. a >>> for instance in session.query(User). ... order_by(User.id): ... print instance.name, instance.fullname Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 35 / 72
  • 64. ˜ Mao na massa Operadores Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 36 / 72
  • 65. ˜ Mao na massa Operadores Igualdade Operador de igualdade # Operador de igualdade. query.filter(User.name == ’ed’) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 37 / 72
  • 66. ˜ Mao na massa Operadores Diferenca ¸ Operador de diferenca ¸ # Operador diferente. query.filter(User.name != ’ed’) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 38 / 72
  • 67. ˜ Mao na massa Operadores Semelhanca ¸ Operador de semelhanca ¸ # Operador de semelhanca. ¸ query.filter(User.name.like(’%ed%’)) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 39 / 72
  • 68. ˜ Mao na massa Operadores ´ Contem Operador de conteudo ´ # Operador IN. query.filter(User.name.in_([’ed’, ’wendy’, ’jack’])) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 40 / 72
  • 69. ˜ Mao na massa Operadores Nulo Testar campo nulo ´ # Verificando se e nulo. filter(User.name == None) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 41 / 72
  • 70. ˜ Mao na massa Operadores ´ ”E”logico ´ Operador logico ”E” # Usando operador AND. from sqlalchemy import and_ filter(and_(User.name == ’ed’, User.fullname == ’Ed Jones’)) e ´ # tamb´m e poss´vel chamar filter()/filter_by() ı # v´rias vezes. a filter(User.name == ’ed’).filter(User.fullname == ’Ed Jones’) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 42 / 72
  • 71. ˜ Mao na massa Operadores ´ ”OU”logico ´ Operador logico ”OU” >>> # Usando o operador or. >>> from sqlalchemy import or_ >>> q= session.query(User).filter(or_(User.name == ’ed’, User.name == ’wendy’)) <sqlalchemy.orm.query.Query object at 0x2286ed0> >>> q.all() Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 43 / 72
  • 72. ˜ Mao na massa Operadores ”Match” Equivalencia # Match tem efeitos que dependem do banco de dados. query.filter(User.name.match(’wendy’)) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 44 / 72
  • 73. ˜ Mao na massa Receitas alternativas Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 45 / 72
  • 74. ˜ Mao na massa Receitas alternativas Obtendo uma lista ´ O metodo all() retorna uma lista >>> # Lista de objetos com o metodo all() >>> query = session.query(User).filter( User.name.like(’%ed’) ).order_by(User.id) >>> query.all() [<User(’ed’,’Ed Jones’, ’f8s7ccs’)>, <User(’fred’,’Fred Flinstone’, ’blah’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 46 / 72
  • 75. ˜ Mao na massa Receitas alternativas Primeiro elemento ´ O metodo first() aplica um limite de 1 e retorna o primeiro registro do resultado >>> # first aplica um limite de 1 com deslocamento 0. >>> query.first() <User(’ed’,’Ed Jones’, ’f8s7ccs’)> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 47 / 72
  • 76. ˜ Mao na massa Receitas alternativas Otendo linha unica ´ ´ ¸˜ ˜ O metodo one() aplica um limite de dois e dispara excecao caso nao obtenha uma e apenas uma linha >>> ¸˜ # Excecoes s˜o disparadas caso o resultado de one a >>> # seja maior que um ou menor que um. >>> try: ... user = query.one() ... except Exception, e: ... print e Multiple rows were found for one() >>> try: ... user = query.filter(User.id == 99).one() ... except Exception, e: ... print e No row was found for one() Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 48 / 72
  • 77. ˜ Mao na massa Receitas alternativas ˜ Expressoes SQL ˜ Pode-se usar expressoes SQL ¸˜ >>> # Passando condicoes com sql usando de strings. >>> for user in session.query(User).filter(quot;id<224quot;). ... order_by(quot;idquot;).all(): ... print user.name Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 49 / 72
  • 78. ˜ Mao na massa Receitas alternativas Parametros SQL Parametros bind # Parametros BIND. >>> session.query(User). ... filter(quot;id<:value and name=:namequot;). ... params(value=224, name=’fred’). ... order_by(User.id).one() <User(’fred’,’Fred Flinstone’, ’blah’)> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 50 / 72
  • 79. ˜ Mao na massa Receitas alternativas Comando SQL ´ SQL completo, necessario manter os nomes dos atributos mapeados. >>> # Comandos SQL com o m´todo from_statement. e >>> # Os nomes das colunas devem ser os mesmos que os >>> # nomes usados no mapper. >>> session.query(User).from_statement( ... quot;SELECT * FROM users where name=:namequot;). ... params(name=’ed’).all() [<User(’ed’,’Ed Jones’, ’f8s7ccs’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 51 / 72
  • 80. ˜ Mao na massa Relacionamento Roteiro 1 ¸˜ Introducao Sobre o palestrante Sobre a palestra 2 Framework SQLAlchemy Conteudo ´ 3 ˜ Mao na massa Os ingredientes ¸˜ Preparacao ¸˜ Utilizacao da biblioteca Consultando Operadores Receitas alternativas Relacionamento 4 Bibliografia Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 52 / 72
  • 81. ˜ Mao na massa Relacionamento ¸˜ Relacao declarativa ¸˜ Especificando a relacao de forma declarativa >>> from sqlalchemy import ForeignKey >>> from sqlalchemy.orm import relation, backref >>> class Address(Base): ... __tablename__ = ’addresses’ ... id = Column(Integer, primary_key=True) ... email_address = Column(String, nullable=False) ... user_id = Column(Integer, ForeignKey(’users.id’)) ... ... user = relation(User, backref=backref(’addresses’, ... order_by=id)) ... ... def __init__(self, email_address): ... self.email_address = email_address ... ... def __repr__(self): ... return quot;<Address(’%s’)>quot; % self.email_address Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 53 / 72
  • 82. ˜ Mao na massa Relacionamento ”BackRef” ¸˜ Na direcao oposta ¸˜ # A flexibilidade da funcao relation() permite a ¸˜ # definicao na classe User. class User(Base): .... addresses = relation(Address, order_by=Address.id, backref=quot;userquot;) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 54 / 72
  • 83. ˜ Mao na massa Relacionamento Aplicando a estrutura Criando as estruturas no banco ¸˜ >>> # Criacao das tabelas no banco. >>> Base.metadata.create_all(engine) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 55 / 72
  • 84. ˜ Mao na massa Relacionamento Novo objeto relacionado ´ ˜ Novos usuarios nao tem email inicialmente >>> # Novo objeto sem enderecos de email. ¸ >>> jack = User(’jack’, ’Jack Bean’, ’gjffdd’) >>> jack.addresses [] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 56 / 72
  • 85. ˜ Mao na massa Relacionamento Lista de enderecos ¸ Podemos adicionar uma lista diretamente # Acessando o relacionamento. >>> jack.addresses [<Address(’jack@google.com’)>, <Address(’j25@yahoo.com’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 57 / 72
  • 86. ˜ Mao na massa Relacionamento ¸˜ Visibilidade nas duas direcoes ˜ ¸˜ Relacionamentos bidirecionais sao vis´veis nas duas direcoes ı >>> # Usu´rio possui enderecos e enderecos s˜o de algum usu´rio. a ¸ ¸ a a >>> jack.addresses[1] <Address(’j25@yahoo.com’)> >>> jack.addresses[1].user <User(’jack’,’Jack Bean’, ’gjffdd’)> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 58 / 72
  • 87. ˜ Mao na massa Relacionamento ”Commitando” ¸˜ Salvando as informacoes no banco >>> # Persistindo o novo usu´rio. a >>> session.add(jack) >>> session.commit() Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 59 / 72
  • 88. ˜ Mao na massa Relacionamento Economia de recursos ˜ As consultas ao banco sao feitas sob demanda >>> # Ao selecionar o usu´rio, o SQL para os enderecos a ¸ a ´ >>> # n˜o e executado. >>> jack = session.query(User). ... filter_by(name=’jack’).one() >>> jack <User(’jack’,’Jack Bean’, ’gjffdd’)> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 60 / 72
  • 89. ˜ Mao na massa Relacionamento Agora os enderecos ¸ ¸˜ Selecao de acordo com a necessidade # Acessando o relacionamento. >>> jack.addresses [<Address(’jack@google.com’)>, <Address(’j25@yahoo.com’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 61 / 72
  • 90. ˜ Mao na massa Relacionamento Economia de acessos ´ Se for o caso e poss´vel buscar tudo antes.(eagerload) ı >>> # Com eagerload os enderecos s˜o obtidos juntamente com o ¸ a >>> # usu´rio. a >>> from sqlalchemy.orm import eagerload >>> jack = session.query(User).options( ... eagerload(’addresses’)). ... filter_by(name=’jack’).one() >>> jack <User(’jack’,’Jack Bean’, ’gjffdd’)> >>> jack.addresses [<Address(’jack@google.com’)>, <Address(’j25@yahoo.com’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 62 / 72
  • 91. ˜ Mao na massa Relacionamento ¸˜ Juntando relacoes Inner join, usando filter() >>> # Usando filtros generativamente para o join. >>> for u, a in session.query(User, Address). ... filter(User.id==Address.user_id).filter( ... Address.email_address==’jack@google.com’). ... all(): ... print u, a <User(’jack’,’Jack Bean’, ’gjffdd’)> <Address(’jack@google.com’)> Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 63 / 72
  • 92. ˜ Mao na massa Relacionamento Relacionando com join ¸˜ Usando a funcao join() >>> # Usando join com o m´todo select_from. e >>> from sqlalchemy.orm import join >>> session.query(User).select_from(join(User, ... Address)).filter( ... Address.email_address==’jack@google.com’). ... all() [<User(’jack’,’Jack Bean’, ’gjffdd’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 64 / 72
  • 93. ˜ Mao na massa Relacionamento Clausula ”on” ´ E poss´vel indicar a clausula on do join ı ¸˜ # condicao explic´ta ı join(User, Address, User.id==Address.user_id) ¸˜ # Especif´ca relacao da esquerda para direita ı join(User, Address, User.addresses) # o mesmo, usando uma string join(User, Address, ’addresses’) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 65 / 72
  • 94. ˜ Mao na massa Relacionamento join em query Aplicando o join() em objetos Query >>> # Aplicando o join no objeto Query. >>> session.query(User).join(User.addresses). ... filter(Address.email_address==’jack@google.com’).all() [<User(’jack’,’Jack Bean’, ’gjffdd’)>] Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 66 / 72
  • 95. ˜ Mao na massa Relacionamento ”Target” ¸˜ Explicitando o alvo da ligacao # Join especificando a propriedade alvo do relacionamento. session.query(User).join((Address, User.addresses)) Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 67 / 72
  • 96. ˜ Mao na massa Relacionamento ˆ Referencias Python - http://www.python.org PythonBrasil - http://www.pythonbrasil.com.br GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr SQLAlchemy - http://www.sqlalchemy.org Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 68 / 72
  • 97. ˜ Mao na massa Relacionamento ˆ Referencias Python - http://www.python.org PythonBrasil - http://www.pythonbrasil.com.br GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr SQLAlchemy - http://www.sqlalchemy.org Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 68 / 72
  • 98. ˜ Mao na massa Relacionamento ˆ Referencias Python - http://www.python.org PythonBrasil - http://www.pythonbrasil.com.br GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr SQLAlchemy - http://www.sqlalchemy.org Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 68 / 72
  • 99. ˜ Mao na massa Relacionamento ˆ Referencias Python - http://www.python.org PythonBrasil - http://www.pythonbrasil.com.br GruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPr SQLAlchemy - http://www.sqlalchemy.org Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 68 / 72
  • 100. ´ Sumario ´ Sumario ¸˜ Introducao Sobre o palestrante Sobre a palestra Caracter´sticas - SQLAlchemy ı ¸˜ Utilizacao Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 69 / 72
  • 101. ´ Sumario ´ Sumario ¸˜ Introducao Sobre o palestrante Sobre a palestra Caracter´sticas - SQLAlchemy ı ¸˜ Utilizacao Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 69 / 72
  • 102. ´ Sumario ´ Sumario ¸˜ Introducao Sobre o palestrante Sobre a palestra Caracter´sticas - SQLAlchemy ı ¸˜ Utilizacao Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 69 / 72
  • 103. ´ Sumario ´ Sumario ¸˜ Introducao Sobre o palestrante Sobre a palestra Caracter´sticas - SQLAlchemy ı ¸˜ Utilizacao Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 69 / 72
  • 104. ´ Sumario ´ Sumario ¸˜ Introducao Sobre o palestrante Sobre a palestra Caracter´sticas - SQLAlchemy ı ¸˜ Utilizacao Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 69 / 72
  • 105. Bibliografia Bibliografia [1] SetupTools1. http://peak.telecommunity.com/DevCenter/setuptools, 3 September 2008. [2] SetupTools2. http://peak.telecommunity.com/DevCenter/EasyInstall# installation-instructions, 3 September 2008. [3] WikiPed1. http://pt.wikipedia.org/wiki/Dados, 2 September 2008. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 70 / 72
  • 106. Bibliografia Bibliografia [1] SetupTools1. http://peak.telecommunity.com/DevCenter/setuptools, 3 September 2008. [2] SetupTools2. http://peak.telecommunity.com/DevCenter/EasyInstall# installation-instructions, 3 September 2008. [3] WikiPed1. http://pt.wikipedia.org/wiki/Dados, 2 September 2008. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 70 / 72
  • 107. Bibliografia Bibliografia [1] SetupTools1. http://peak.telecommunity.com/DevCenter/setuptools, 3 September 2008. [2] SetupTools2. http://peak.telecommunity.com/DevCenter/EasyInstall# installation-instructions, 3 September 2008. [3] WikiPed1. http://pt.wikipedia.org/wiki/Dados, 2 September 2008. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 70 / 72
  • 108. Bibliografia Agradecimentos ¸˜ ˆ ASCAM-PR, Associacao de Servidores de Camaras Municipais ´ da Parana. ¸˜ ˆ ABRASCAM, Associacao Brasileira de Servidores de Camaras Municipais. ¸˜ Comunidade Python Brasil e APyBR, Associacao Python Brasil. Comunidade de Software Livre. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 71 / 72
  • 109. Bibliografia Agradecimentos ¸˜ ˆ ASCAM-PR, Associacao de Servidores de Camaras Municipais ´ da Parana. ¸˜ ˆ ABRASCAM, Associacao Brasileira de Servidores de Camaras Municipais. ¸˜ Comunidade Python Brasil e APyBR, Associacao Python Brasil. Comunidade de Software Livre. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 71 / 72
  • 110. Bibliografia Agradecimentos ¸˜ ˆ ASCAM-PR, Associacao de Servidores de Camaras Municipais ´ da Parana. ¸˜ ˆ ABRASCAM, Associacao Brasileira de Servidores de Camaras Municipais. ¸˜ Comunidade Python Brasil e APyBR, Associacao Python Brasil. Comunidade de Software Livre. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 71 / 72
  • 111. Bibliografia Agradecimentos ¸˜ ˆ ASCAM-PR, Associacao de Servidores de Camaras Municipais ´ da Parana. ¸˜ ˆ ABRASCAM, Associacao Brasileira de Servidores de Camaras Municipais. ¸˜ Comunidade Python Brasil e APyBR, Associacao Python Brasil. Comunidade de Software Livre. Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 71 / 72
  • 112. Bibliografia ˜ Conclusao ´ ´ Python e uma linguagem muito bacana, facil de aprender, poderosa e produtiva, aliada a gama de bibliotecas e frameworks torna-se hoje um conhecimento muito valioso, empresas como Nokia, Globo e Google procuram profissionais com esse conhecimento pelo mundo todo. ´ Usar essa tecnologia para trabalhar com bancos de dados e bem ¸˜ tranquilo e possui inumeras opcoes. ´ Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 72 / 72