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