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