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.
O que é Internet?
Origem da Internet
Histórico da história da internet
Aparecimento da internet no Brasil
Surgimento da Web
Considerações
Referências Bibliográficas
Escola Técnica Estadual Aderico Alves de Vasconcelos
Curso: Técnico de Redes de Computadores
Disciplina: Tecnologias Atuais de Redes
Professor: Fagner Lima
O que é Internet?
Origem da Internet
Histórico da história da internet
Aparecimento da internet no Brasil
Surgimento da Web
Considerações
Referências Bibliográficas
Escola Técnica Estadual Aderico Alves de Vasconcelos
Curso: Técnico de Redes de Computadores
Disciplina: Tecnologias Atuais de Redes
Professor: Fagner Lima
Na estréia da série sobre Node.js, vamos falar sobre a história e as principais caraterísticas da plataforma como o V8, event loop e thread pool.
Vamos mostrar por meio de diversos exemplos como o Node.js funciona e quais são os aspectos importantes em termos de escalabilidade e performance.
https://www.youtube.com/watch?v=KtDwdoxQL4A
Fundamentos, arquiteturas de serviços de rede baseadas na disposição física/lógico dos componentes básicos de um serviço além de alguns exemplos de serviços e seus propósitos
Na estréia da série sobre Node.js, vamos falar sobre a história e as principais caraterísticas da plataforma como o V8, event loop e thread pool.
Vamos mostrar por meio de diversos exemplos como o Node.js funciona e quais são os aspectos importantes em termos de escalabilidade e performance.
https://www.youtube.com/watch?v=KtDwdoxQL4A
Fundamentos, arquiteturas de serviços de rede baseadas na disposição física/lógico dos componentes básicos de um serviço além de alguns exemplos de serviços e seus propósitos
Baixe mais arquivos em http://pastadomau.wikidot.com.
Este trabalho mostra duas extensões do tradicional modelo relacional para banco de dados. Essas extensões do modelo relacional visam ampliar a aplicabilidade do banco de dados sem sacrificar o fundamento relacional.
As duas extensões abordadas são:
- Modelo Baseado em Lógica
- Modelo Relacional Encaixado
Nota importante: essa textura de fundo era moda nos anos 90.
A Gentle Introduction To Docker And All Things ContainersJérôme Petazzoni
Docker is a runtime for Linux Containers. It enables "separation of concern" between devs and ops, and solves the "matrix from hell" of software deployment. This presentation explains it all! It also explains the role of the storage backend and compares the various backends available. It gives multiple recipes to build Docker images, including integration with configuration management software like Chef, Puppet, Salt, Ansible. If you already watched other Docker presentations, this is an actualized version (as of mid-November 2013) of the thing!
OpenLDAP, criando e explorando um overlayDiego Santos
O protocolo LDAP se tornou um padrão para serviços de diretórios e é implementado em softwares renomados como OpenLDAP e outros não tão renomados assim como Active Directory(!?MS-PAC/MS-KILE/MS-NLMP?!). O desenvolvimento de overlays para o OpenLDAP é a forma mais elegante que temos para adicionar novas funcionalidades ao mesmo, mas o que pode acontecer quando desenvolvedores desavisados se aventuram no submundo dos códigos do OpenLDAP ?
A importância dos padrões na comunidade PHPklaussilveira
Palestra dedicada a explicar o que são as PSR's e como o PHP-FIG funciona, inclusive mostrando o processo de submissão de proposta (usando o exemplo da minha submissão da PSR-1).
Apresentação do grupo PHPMS - Grupo de Usuários PHP de Mato Grosso do Sul / Brasil - na XII Semana da Computação da Universidade Uniderp/Anhanguera - 29/09/10
Palestra sobre o projeto F123.org, leitor de tela Orca, python e acessibilidade apresentada no FISL11. Explicações sobre acessibilidade e formas de ajudar o projeto Orca e o projeto F123.org
Automação de Testes com Robot Framework - GUTS-SCMayara Fernandes
Slides da palestra de introdução ao Robot Framework - Framework de automação de testes baseado em keyword-driven. Apresentado no evento 6º GUTS-SC em 28/11/2017.
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
Apresentação utilizada na palestra realizada no dia 08/10/2014 na faculdade Meta, contendo uma introdução sobre a linguagem de programação Python, suas aplicações, empresas que utilizam e exemplos de uso aplicado a algumas situações, mostrando o potencial desta linguagem, que vai desde o acesso a bancos de dados, geração de sites, aplicações desktop e web multiplataformas (windows, linux, freebsd, MacOS), web, mineração de dados, inteligência artificial, até o desenvolvimento de aplicações mobile (android, iOS).
Slides da minha palestra sobre a evolução do PHP, a linguagem mais utilizada na web.
Nesta palestra eu mostro como o PHP tem evoluído e melhorado, falo sobre a padronização e a união da comunidade para ter ferramentas melhores.
Plone Portal, cultural and economic challenges in public organizationsRamiro Luz
After the evaluation of several tools we decided to use Plone as our portal.
But this is just the first decision.
There are several technical aspects to consider also.
But it is so important to pay attention to the people involved in the project, their background culture and behaviors.
Furthermore, the public organizations investments need to be effective and efficient to avoid waste of citizens money.
This talk will present the situations we faced during the adoption of Plone as our CMS.
A palestra apresenta uma introdução aos conceitos de mineração de dados com exemplos em Python.
A mineração de dados é muito utilizada para identificar padrões e então recomendar e classificar informação.
Quando são apresentadas sugestões de livros, músicas ou produtos em sites de comércio eletrônico, são utilizadas técnicas de mineração de dados.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Ramiro Luz
Palestra apresentada na Semana Acadêmica do curso de Tecnologia em Análise e Desenvolvimento de Sistemas da Universidade Federal do Paraná em Agosto de 2015.
Usando Dojos de Programação para o Ensino de TDDRamiro Luz
Apresentação de artigo academico no 23 Simpósio Brasileiro de Informática na Educação - SBIE, evento do Congresso Brasileiro de Informática na Educação - CBIE.
Sabores do desenvolvimento web com PythonRamiro Luz
Palestra ministrada para alunos de Bacharelado em Sistemas de Informação da UTFPR como parte das atividades extra classe abordando os frameworks web2py, django e plone.
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