112
A magia do mapeamento objeto relacional com SQLAlchemy Python ORM(Mapeamento objeto relacional) Ramiro Luz 2 1 Associac ¸˜ ao Python Brasil - APyBR 2 Comunidade de usu ´ arios Python Brasileira Grupo de Usu´ arios Python do Paran´ a Congresso Internacional de Software Livre, S ˜ ao Paulo-SP, 2008 Ramiro Batista da Luz (APyBR) SQLAlchemy - Python - ORM CONISLI 2008 1 / 72

SQLAlchemy - A magia do mapeamento objeto relacional

Embed Size (px)

DESCRIPTION

Apresentação da biblioteca de mapeamento objeto relacional escrita em Python, SQLAlchemy. Um framework de mapeamento objeto relacional flexível e muito poderoso, comparado muitas vezes com Hybernate, um framework escrito em Java.

Citation preview

Page 1: SQLAlchemy - A magia do mapeamento objeto relacional

A magia do mapeamento objeto relacional comSQLAlchemy

Python ORM(Mapeamento objeto relacional)

Ramiro Luz2

1Associacao Python Brasil - APyBR

2Comunidade de usuarios Python BrasileiraGrupo 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

Page 2: SQLAlchemy - A magia do mapeamento objeto relacional

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 3: SQLAlchemy - A magia do mapeamento objeto relacional

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 4: SQLAlchemy - A magia do mapeamento objeto relacional

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 5: SQLAlchemy - A magia do mapeamento objeto relacional

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 6: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre o palestrante

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 7: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 8: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 9: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 10: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 11: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 12: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 13: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 14: SQLAlchemy - A magia do mapeamento objeto relacional

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-PRhttp://www.debian-pr.org/Grupo de usuarios da linguagem Python do Parana, GruPy-PRhttp://www.pythonbrasil.com.br/moin.cgi/GrupyPrMembro suplente do Conselho Deliberativo da Associacao PythonBrasil, http://associacao.pythonbrasil.org/

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

Page 15: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre a palestra

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 16: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre a palestra

Conceitos

ProgramacaoBancos de dadosOrientacao a objetosTermos tecnicos usados na palestra.

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

Page 17: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre a palestra

Conceitos

ProgramacaoBancos de dadosOrientacao a objetosTermos tecnicos usados na palestra.

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

Page 18: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre a palestra

Conceitos

ProgramacaoBancos de dadosOrientacao a objetosTermos tecnicos usados na palestra.

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

Page 19: SQLAlchemy - A magia do mapeamento objeto relacional

Introducao Sobre a palestra

Conceitos

ProgramacaoBancos de dadosOrientacao a objetosTermos tecnicos usados na palestra.

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

Page 20: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 21: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

A linguagem Python

Linguagem de programacao dinamica e interpretada de facilaprendizado.Usada em uma grande variedade de domınios de aplicacoes,Web, processamento de email, tratamento de html e xml, acessoa banco de dados, aplicacoes para rede, interfaces graficas,computacao cientıfica, jogos, educacao, entre outras.Clareza da sintaxe, Identacao obrigatoria, pequena quantidade depalavras reservadas, as bibliotecas sao muitos faceis de usar.Python possue uma grande variedade de bibliotecas, alem dabiblioteca padrao a linguagem conta com uma enorme variedadede bibliotecas encontradas no ındice de pacotes python,http://pypi.python.org/pypiLinguagem com uma produtividade muito grande, tarefascompletas com poucas linhas, codigo simples, facilidade demanutencao.

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

Page 22: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

A linguagem Python

Linguagem de programacao dinamica e interpretada de facilaprendizado.Usada em uma grande variedade de domınios de aplicacoes,Web, processamento de email, tratamento de html e xml, acessoa banco de dados, aplicacoes para rede, interfaces graficas,computacao cientıfica, jogos, educacao, entre outras.Clareza da sintaxe, Identacao obrigatoria, pequena quantidade depalavras reservadas, as bibliotecas sao muitos faceis de usar.Python possue uma grande variedade de bibliotecas, alem dabiblioteca padrao a linguagem conta com uma enorme variedadede bibliotecas encontradas no ındice de pacotes python,http://pypi.python.org/pypiLinguagem com uma produtividade muito grande, tarefascompletas com poucas linhas, codigo simples, facilidade demanutencao.

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

Page 23: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

A linguagem Python

Linguagem de programacao dinamica e interpretada de facilaprendizado.Usada em uma grande variedade de domınios de aplicacoes,Web, processamento de email, tratamento de html e xml, acessoa banco de dados, aplicacoes para rede, interfaces graficas,computacao cientıfica, jogos, educacao, entre outras.Clareza da sintaxe, Identacao obrigatoria, pequena quantidade depalavras reservadas, as bibliotecas sao muitos faceis de usar.Python possue uma grande variedade de bibliotecas, alem dabiblioteca padrao a linguagem conta com uma enorme variedadede bibliotecas encontradas no ındice de pacotes python,http://pypi.python.org/pypiLinguagem com uma produtividade muito grande, tarefascompletas com poucas linhas, codigo simples, facilidade demanutencao.

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

Page 24: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

A linguagem Python

Linguagem de programacao dinamica e interpretada de facilaprendizado.Usada em uma grande variedade de domınios de aplicacoes,Web, processamento de email, tratamento de html e xml, acessoa banco de dados, aplicacoes para rede, interfaces graficas,computacao cientıfica, jogos, educacao, entre outras.Clareza da sintaxe, Identacao obrigatoria, pequena quantidade depalavras reservadas, as bibliotecas sao muitos faceis de usar.Python possue uma grande variedade de bibliotecas, alem dabiblioteca padrao a linguagem conta com uma enorme variedadede bibliotecas encontradas no ındice de pacotes python,http://pypi.python.org/pypiLinguagem com uma produtividade muito grande, tarefascompletas com poucas linhas, codigo simples, facilidade demanutencao.

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

Page 25: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

A linguagem Python

Linguagem de programacao dinamica e interpretada de facilaprendizado.Usada em uma grande variedade de domınios de aplicacoes,Web, processamento de email, tratamento de html e xml, acessoa banco de dados, aplicacoes para rede, interfaces graficas,computacao cientıfica, jogos, educacao, entre outras.Clareza da sintaxe, Identacao obrigatoria, pequena quantidade depalavras reservadas, as bibliotecas sao muitos faceis de usar.Python possue uma grande variedade de bibliotecas, alem dabiblioteca padrao a linguagem conta com uma enorme variedadede bibliotecas encontradas no ındice de pacotes python,http://pypi.python.org/pypiLinguagem com uma produtividade muito grande, tarefascompletas com poucas linhas, codigo simples, facilidade demanutencao.

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

Page 26: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Bancos de dados relacionais

Dados: Registros ou indıcios relacionaveis a alguma entidade ouevento.[3].Dados organizados produzem informaes. Sistemas deGerenciamento 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 emlinhas 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

Page 27: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Bancos de dados relacionais

Dados: Registros ou indıcios relacionaveis a alguma entidade ouevento.[3].Dados organizados produzem informaes. Sistemas deGerenciamento 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 emlinhas 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

Page 28: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Bancos de dados relacionais

Dados: Registros ou indıcios relacionaveis a alguma entidade ouevento.[3].Dados organizados produzem informaes. Sistemas deGerenciamento 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 emlinhas 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

Page 29: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Bancos de dados relacionais

Dados: Registros ou indıcios relacionaveis a alguma entidade ouevento.[3].Dados organizados produzem informaes. Sistemas deGerenciamento 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 emlinhas 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

Page 30: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Bancos de dados relacionais

Dados: Registros ou indıcios relacionaveis a alguma entidade ouevento.[3].Dados organizados produzem informaes. Sistemas deGerenciamento 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 emlinhas 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

Page 31: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Orientacao a objetos

Evolucao das tecnicas: Programacao estruturada - estruturadamodular - orientada a objetos.Orientacao a objetos embutida na linguagem Python, Veja oexemplo:>>> print "teste".upper()TESTE

A constante string ”teste”ja possui metodos de string, como”upper”.Dados relacionais(linhas e colunas) X Estruturas e elementos daslinguagens de programacao.Banco de dados + Orientacao a objetos -> Mapeamentoobjeto relacional.

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

Page 32: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Orientacao a objetos

Evolucao das tecnicas: Programacao estruturada - estruturadamodular - orientada a objetos.Orientacao a objetos embutida na linguagem Python, Veja oexemplo:>>> print "teste".upper()TESTE

A constante string ”teste”ja possui metodos de string, como”upper”.Dados relacionais(linhas e colunas) X Estruturas e elementos daslinguagens de programacao.Banco de dados + Orientacao a objetos -> Mapeamentoobjeto relacional.

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

Page 33: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Orientacao a objetos

Evolucao das tecnicas: Programacao estruturada - estruturadamodular - orientada a objetos.Orientacao a objetos embutida na linguagem Python, Veja oexemplo:>>> print "teste".upper()TESTE

A constante string ”teste”ja possui metodos de string, como”upper”.Dados relacionais(linhas e colunas) X Estruturas e elementos daslinguagens de programacao.Banco de dados + Orientacao a objetos -> Mapeamentoobjeto relacional.

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

Page 34: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Orientacao a objetos

Evolucao das tecnicas: Programacao estruturada - estruturadamodular - orientada a objetos.Orientacao a objetos embutida na linguagem Python, Veja oexemplo:>>> print "teste".upper()TESTE

A constante string ”teste”ja possui metodos de string, como”upper”.Dados relacionais(linhas e colunas) X Estruturas e elementos daslinguagens de programacao.Banco de dados + Orientacao a objetos -> Mapeamentoobjeto relacional.

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

Page 35: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Frameworks

Arcabouco, que pode ser definido como: Esboco, delineamentoinicial. Esqueleto. Madeiramento de uma construcao. Estruturaque da suporte para um projeto, organismo ou construcao maior.Na informatica esse termo e usado para descrever uma estruturaa ser usada na construcao e organizacao de sistemas.Um framework fornece bibliotecas e funcoes que ajudam oprogramador no desenvolvimento organizado de projetos maiores.

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

Page 36: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Frameworks

Arcabouco, que pode ser definido como: Esboco, delineamentoinicial. Esqueleto. Madeiramento de uma construcao. Estruturaque da suporte para um projeto, organismo ou construcao maior.Na informatica esse termo e usado para descrever uma estruturaa ser usada na construcao e organizacao de sistemas.Um framework fornece bibliotecas e funcoes que ajudam oprogramador no desenvolvimento organizado de projetos maiores.

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

Page 37: SQLAlchemy - A magia do mapeamento objeto relacional

Framework SQLAlchemy Conteudo

Frameworks

Arcabouco, que pode ser definido como: Esboco, delineamentoinicial. Esqueleto. Madeiramento de uma construcao. Estruturaque da suporte para um projeto, organismo ou construcao maior.Na informatica esse termo e usado para descrever uma estruturaa ser usada na construcao e organizacao de sistemas.Um framework fornece bibliotecas e funcoes que ajudam oprogramador no desenvolvimento organizado de projetos maiores.

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

Page 38: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Os ingredientes

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 39: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Os ingredientes

Instalacao

Assim como a maioria dos programas feitos com a linguagemPython a maneira de instalar a partir dos fontes e descompactar eexecutar dentro do diretorio o comando:# python setup.py install

Em distribuicoes derivadas do debian o seguinte comando podeser 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

Page 40: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Os ingredientes

Instalacao

Assim como a maioria dos programas feitos com a linguagemPython a maneira de instalar a partir dos fontes e descompactar eexecutar dentro do diretorio o comando:# python setup.py install

Em distribuicoes derivadas do debian o seguinte comando podeser 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

Page 41: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Os ingredientes

Instalacao

Assim como a maioria dos programas feitos com a linguagemPython a maneira de instalar a partir dos fontes e descompactar eexecutar dentro do diretorio o comando:# python setup.py install

Em distribuicoes derivadas do debian o seguinte comando podeser 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

Page 42: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Preparacao

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 43: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Preparacao

Verso

Obtendo a versao da biblioteca

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

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

Page 44: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Preparacao

Conexao

Conectando um banco de dados sqllite temporario, na memoria docomputador

>>> # Conectando a um banco de dados sqllite temporario,>>> # 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 memoria.>>> engine = create_engine(’sqlite:///:memory:’, echo=True)

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

Page 45: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 46: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 47: SQLAlchemy - A magia do mapeamento objeto relacional

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...... # Metodo que "representa" o objeto, por... # exemplo ao usar o comando "print objeto"... def __repr__(self):... return "<User(’%s’,’%s’, ’%s’)>" % (self.name, \... self.fullname, \... self.password)

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

Page 48: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 49: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 50: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Criando objetos

A criacao de um objeto

>>> # A criacao de um novo registro segue os padroes de>>> # 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

Page 51: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Sessoes

Definindo e criando sessoes

>>> # Com o comando sessionmaker criamos uma>>> # fabrica de sessoes.>>> from sqlalchemy.orm import sessionmaker>>> Session = sessionmaker(bind=engine)>>> session = Session()

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

Page 52: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Persistencia

Persistencia no banco

>>> # Para persistir o objeto ed_user, adicionamos a sessao.>>> # Assim que for necessario o comando INSERT sera executado.>>> 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_userTrue

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

Page 53: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Salvando lista de objetos

Adicionando varios objetos de uma vez

# Adicionando uma lista de usuarios.>>> 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

Page 54: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Utilizacao da biblioteca

Alteracao

Alteracao e confirmacao

>>> ed_user.password = ’f8s7ccs’>>> session.dirtyIdentitySet([<User(’ed’,’Ed Jones’, ’f8s7ccs’)>])>>> session.newIdentitySet([<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

Page 55: SQLAlchemy - A magia do mapeamento objeto relacional

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 sessionFalse>>> 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

Page 56: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Consultando

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 57: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Consultando

Obtendo objetos

Iterando por objetos

>>> # Cada iteracao retorna um objeto usuario.>>> 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

Page 58: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Consultando

Obtendo tuplas

Iterando por tuplas

>>> # Para cada iteracao as variaveis recebem os>>> # 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

Page 59: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 60: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 61: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Consultando

Filtrando

Com filtros usando argumentos com palavras chave

>>> # Os parametros com palavra chave sao usados para>>> # 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

Page 62: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 63: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Consultando

”Join”encadeando filtros

”filter”retorna objetos query

>>> # Cada iteracao retorna um objeto usuario.>>> 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

Page 64: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Operadores

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 65: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 66: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 67: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 68: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 69: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 70: SQLAlchemy - A magia do mapeamento objeto relacional

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’))

# tambem e possıvel chamar filter()/filter_by()# varias vezes.filter(User.name == ’ed’).filter(User.fullname == ’Ed Jones’)

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

Page 71: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 72: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 73: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Receitas alternativas

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 74: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 75: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Receitas alternativas

Primeiro elemento

O metodo first() aplica um limite de 1 e retorna o primeiro registro doresultado

>>> # 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

Page 76: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Receitas alternativas

Otendo linha unica

O metodo one() aplica um limite de dois e dispara excecao caso naoobtenha uma e apenas uma linha

>>> # Excecoes sao disparadas caso o resultado de one>>> # 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

Page 77: SQLAlchemy - A magia do mapeamento objeto relacional

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("id<224").\... order_by("id").all():... print user.name

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

Page 78: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Receitas alternativas

Parametros SQL

Parametros bind

# Parametros BIND.>>> session.query(User).\... filter("id<:value and name=:name").\... 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

Page 79: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Receitas alternativas

Comando SQL

SQL completo, necessario manter os nomes dos atributos mapeados.

>>> # Comandos SQL com o metodo from_statement.>>> # Os nomes das colunas devem ser os mesmos que os>>> # nomes usados no mapper.>>> session.query(User).from_statement(\... "SELECT * FROM users where name=:name").\... params(name=’ed’).all()

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

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

Page 80: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Roteiro

1 IntroducaoSobre o palestranteSobre a palestra

2 Framework SQLAlchemyConteudo

3 Mao na massaOs ingredientesPreparacaoUtilizacao da bibliotecaConsultandoOperadoresReceitas alternativasRelacionamento

4 Bibliografia

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

Page 81: SQLAlchemy - A magia do mapeamento objeto relacional

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 "<Address(’%s’)>" % self.email_address

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

Page 82: SQLAlchemy - A magia do mapeamento objeto relacional

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="user")

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

Page 83: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 84: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 85: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Lista de enderecos

Podemos adicionar uma lista diretamente

# Acessando o relacionamento.>>> jack.addresses[<Address(’[email protected]’)>,<Address(’[email protected]’)>]

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

Page 86: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Visibilidade nas duas direcoes

Relacionamentos bidirecionais sao visıveis nas duas direcoes

>>> # Usuario possui enderecos e enderecos sao de algum usuario.>>> jack.addresses[1]<Address(’[email protected]’)>

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

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

Page 87: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

”Commitando”

Salvando as informacoes no banco

>>> # Persistindo o novo usuario.>>> session.add(jack)>>> session.commit()

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

Page 88: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Economia de recursos

As consultas ao banco sao feitas sob demanda

>>> # Ao selecionar o usuario, o SQL para os enderecos>>> # nao 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

Page 89: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Agora os enderecos

Selecao de acordo com a necessidade

# Acessando o relacionamento.>>> jack.addresses[<Address(’[email protected]’)>,<Address(’[email protected]’)>]

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

Page 90: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Economia de acessos

Se for o caso e possıvel buscar tudo antes.(eagerload)

>>> # Com eagerload os enderecos sao obtidos juntamente com o>>> # usuario.>>> 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(’[email protected]’)>,<Address(’[email protected]’)>]

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

Page 91: SQLAlchemy - A magia do mapeamento objeto relacional

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==’[email protected]’).\... all():... print u, a<User(’jack’,’Jack Bean’, ’gjffdd’)><Address(’[email protected]’)>

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

Page 92: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Relacionando com join

Usando a funcao join()

>>> # Usando join com o metodo select_from.>>> from sqlalchemy.orm import join>>> session.query(User).select_from(join(User,... Address)).filter(\... Address.email_address==’[email protected]’).\... all()[<User(’jack’,’Jack Bean’, ’gjffdd’)>]

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

Page 93: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Clausula ”on”

E possıvel indicar a clausula on do join

# condicao explicıtajoin(User, Address, User.id==Address.user_id)# Especifıca relacao da esquerda para direitajoin(User, Address, User.addresses)# o mesmo, usando uma stringjoin(User, Address, ’addresses’)

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

Page 94: SQLAlchemy - A magia do mapeamento objeto relacional

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==’[email protected]’).all()[<User(’jack’,’Jack Bean’, ’gjffdd’)>]

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

Page 95: SQLAlchemy - A magia do mapeamento objeto relacional

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

Page 96: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Referencias

Python - http://www.python.orgPythonBrasil - http://www.pythonbrasil.com.brGruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPrSQLAlchemy - http://www.sqlalchemy.org

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

Page 97: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Referencias

Python - http://www.python.orgPythonBrasil - http://www.pythonbrasil.com.brGruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPrSQLAlchemy - http://www.sqlalchemy.org

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

Page 98: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Referencias

Python - http://www.python.orgPythonBrasil - http://www.pythonbrasil.com.brGruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPrSQLAlchemy - http://www.sqlalchemy.org

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

Page 99: SQLAlchemy - A magia do mapeamento objeto relacional

Mao na massa Relacionamento

Referencias

Python - http://www.python.orgPythonBrasil - http://www.pythonbrasil.com.brGruPy-PR - http://www.pythonbrasil.com.br/moin.cgi/GrupyPrSQLAlchemy - http://www.sqlalchemy.org

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

Page 100: SQLAlchemy - A magia do mapeamento objeto relacional

Sumario

Sumario

IntroducaoSobre o palestranteSobre a palestra

Caracterısticas - SQLAlchemyUtilizacao

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

Page 101: SQLAlchemy - A magia do mapeamento objeto relacional

Sumario

Sumario

IntroducaoSobre o palestranteSobre a palestra

Caracterısticas - SQLAlchemyUtilizacao

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

Page 102: SQLAlchemy - A magia do mapeamento objeto relacional

Sumario

Sumario

IntroducaoSobre o palestranteSobre a palestra

Caracterısticas - SQLAlchemyUtilizacao

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

Page 103: SQLAlchemy - A magia do mapeamento objeto relacional

Sumario

Sumario

IntroducaoSobre o palestranteSobre a palestra

Caracterısticas - SQLAlchemyUtilizacao

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

Page 104: SQLAlchemy - A magia do mapeamento objeto relacional

Sumario

Sumario

IntroducaoSobre o palestranteSobre a palestra

Caracterısticas - SQLAlchemyUtilizacao

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

Page 105: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Bibliografia

[1] SetupTools1.http://peak.telecommunity.com/DevCenter/setuptools, 3September 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

Page 106: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Bibliografia

[1] SetupTools1.http://peak.telecommunity.com/DevCenter/setuptools, 3September 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

Page 107: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Bibliografia

[1] SetupTools1.http://peak.telecommunity.com/DevCenter/setuptools, 3September 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

Page 108: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Agradecimentos

ASCAM-PR, Associacao de Servidores de Camaras Municipaisda Parana.ABRASCAM, Associacao Brasileira de Servidores de CamarasMunicipais.Comunidade Python Brasil e APyBR, Associacao Python Brasil.Comunidade de Software Livre.

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

Page 109: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Agradecimentos

ASCAM-PR, Associacao de Servidores de Camaras Municipaisda Parana.ABRASCAM, Associacao Brasileira de Servidores de CamarasMunicipais.Comunidade Python Brasil e APyBR, Associacao Python Brasil.Comunidade de Software Livre.

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

Page 110: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Agradecimentos

ASCAM-PR, Associacao de Servidores de Camaras Municipaisda Parana.ABRASCAM, Associacao Brasileira de Servidores de CamarasMunicipais.Comunidade Python Brasil e APyBR, Associacao Python Brasil.Comunidade de Software Livre.

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

Page 111: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Agradecimentos

ASCAM-PR, Associacao de Servidores de Camaras Municipaisda Parana.ABRASCAM, Associacao Brasileira de Servidores de CamarasMunicipais.Comunidade Python Brasil e APyBR, Associacao Python Brasil.Comunidade de Software Livre.

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

Page 112: SQLAlchemy - A magia do mapeamento objeto relacional

Bibliografia

Conclusao

Python e uma linguagem muito bacana, facil de aprender, poderosa eprodutiva, aliada a gama de bibliotecas e frameworks torna-se hoje umconhecimento muito valioso, empresas como Nokia, Globo e Googleprocuram profissionais com esse conhecimento pelo mundo todo.Usar essa tecnologia para trabalhar com bancos de dados e bemtranquilo e possui inumeras opcoes.

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