SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Implementação de Acesso a múltiplos
  Bancos de dados no Django 1.1.


     Rômulo Jales - romulo@romulojales.com
               www.romulojales.com
Quem vos fala?
●   Engenheiro da Computação
●   FITec
●   Envolvimentos:
    –   Linux
    –   Embarcados
    –   Sistemas Distribuídos
    –   Python
    –   C
    –   ShellScript
Agenda
●   O que é Django?
●   Análise do caso
●   A solução
●   Resultados
●   Demonstração
O que é Django?
●   Um framework web de alto nível
●   Escrito em Python
●   Estimula o desenvolvimento rápido e limpo
●   Implementa o conceito DRY
    “Um framework para perfeccionistas
    com deadlines”
●   www.djangoproject.org
Quem usa o django?
●   globo.com
●   washingtonpost.com
●   E outros 3575 cadastrados no
    http://www.djangosites.org/!
O que é django?
Análise de caso
●   O que eu quero?
●   Como o Django acessa um banco?
●   Quem são as classes e entidades?
●   Tenho know how para propor uma solução?
O que eu quero? Qual a minha necessidade?
             O que eu tenho?
Django 1.1
●   Não acessa múltiplos bandos de dados
●   Versão homologada em produção
●   Acesso a bancos legados
●   Sistema heterogêneo
    –   Postgresql e MS SqlServer
Como o Django acessa um
                banco?
●   Classes do tipo Model
●   Model <= Managers
    A Manager is the interface through which
    database query operations are provided to
    Django models. At least one Manager
    exists for every model in a Django
    application.
●   Atributo object é um manager
    –   FOO.object.get_all()
Managers
●   Como o Manager se conecta com um banco?
●   Classe de interface? E a implementação?
●   Tudo se resume ao método get_query_set
QuerySet
●   Represents a lazy database lookup for a set
    of objects.
●   Obejo query, inicialização:
    –   Instância de Model
    –   django.db.connection
         ●   django/db/__init__.py
django.db.connection
DataBaseWrapper
●   Instância de backend de banco
●   load_backend(settings.DATABASE_ENGINE
    )
●   Daqui para frente é específico ao banco
Recapitulando

Model
        Manager
                  QuerySet
                    query



                    Settings
O que preciso fazer?
●   Indexar as conf de banco no settings e ler!
●   Estruturar a informação
●   Reusar as classes existentes
●   Manter compatibilidade
Novas infraestrutura

●   QuerySet
    –   Permitir que query aceite um banco por parâmetro
●   Manager
    –   Usar o novo QuerySet
MultiBDManager
MultiBDBaseQuery
E para o usuário?
●   github.com/romulojales/django-multidb
●   Copie na raiz do seu projeto
●   Configurar no settings.py os novos bancos
●   Crie um dicionário SECONDARY_DB
    –   Chave é o banco
    –   Valor é um dicionário com as configurações do
         banco, tal qual o padrão.
E para o usuário?
●   Na classe model:
●   _default_manager =
    MultiBdManager(“BANCO”)
Resultados

def get_op_from_scf(serial):
  import _mssql

  mssql = _mssql.connect('IP_DO_SERVER','linux','SENHA')

  query = "SELECT OP FROM CONSULTA_OP WHERE NUMEROSERIE = '"+serial+"'"

  mssql.query(query)
  ret = mssql.fetch_array()

    If ret[0][1] == 0:
     raise Exception("Nao existe nenhuma OP para o numero de serie informado: " + str(serial))

    op = ret[0][2][0][0]

    return op.strip()
Resultados
class OPLEGADO(Model):
   class Meta:
      db_table = "CONSULTA_OP"
      managed = False
   _default_manager = MultiBdManager("scf")
   op = CharField(max_length=13,primary_key=True)
   numeroserie = CharField(max_length=26)



def get_op_from_scf(serial):
     op = OPLEGADO.objects.get(numeroserie=serial)
     If op:
          return op
     else:
          raise Exception(“"Nao existe nenhuma OP para o numero de serie
informado: " + str(serial))
Limitações
●   Não sincroniza todos os bancos
    simultaneamente!
●   Funciona apenas para versões >= 1.1 do
    Django.
Futuro
    Terminar implementação dos sinais:
    –   O usuário precisará apenas do objeto
         sec_db_name
●   Django 1.2 implementa multibd
MultiBd no 1.2
●   http://docs.djangoproject.com/en/1.2/topics/db/multi-db/
●   CRUD, parametro using
●   settings.py -> Databases
●   Objeto connections virou um dicionário
●   Não sincroniza todos os BD simultaneamente
Demonstração

Mais conteúdo relacionado

Mais procurados

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 

Mais procurados (19)

SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?SSD no banco de dados é bom mesmo?
SSD no banco de dados é bom mesmo?
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2
 
NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Elasticsearch: o desafio como banco principal e cuidados em produção
Elasticsearch: o desafio como banco principal e cuidados em produçãoElasticsearch: o desafio como banco principal e cuidados em produção
Elasticsearch: o desafio como banco principal e cuidados em produção
 
Rockstar core data
Rockstar core dataRockstar core data
Rockstar core data
 
Mongopesl
MongopeslMongopesl
Mongopesl
 
#3 Instalação MongoDB
#3   Instalação MongoDB  #3   Instalação MongoDB
#3 Instalação MongoDB
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Palestra - Meetup WordPress Brasília 2014 - WordPress vs Hacker
Palestra  - Meetup WordPress Brasília 2014 - WordPress vs HackerPalestra  - Meetup WordPress Brasília 2014 - WordPress vs Hacker
Palestra - Meetup WordPress Brasília 2014 - WordPress vs Hacker
 
GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1
 

Destaque (10)

Pug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debuggerPug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debugger
 
Python simplecv
Python simplecvPython simplecv
Python simplecv
 
Processamento de Linguagem natural com PHP
Processamento de Linguagem natural com PHPProcessamento de Linguagem natural com PHP
Processamento de Linguagem natural com PHP
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
W2py pyconpe
W2py pyconpeW2py pyconpe
W2py pyconpe
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programação
 
Dados abertos ciencia_livre
Dados abertos ciencia_livreDados abertos ciencia_livre
Dados abertos ciencia_livre
 
Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?Porque aprender haskell me fez um programador python melhor?
Porque aprender haskell me fez um programador python melhor?
 
Palestra Institucional PUG-PE
Palestra Institucional PUG-PEPalestra Institucional PUG-PE
Palestra Institucional PUG-PE
 
PyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for FoursquarePyFoursquare: Python Library for Foursquare
PyFoursquare: Python Library for Foursquare
 

Semelhante a Uma implementação de suporte a

Transifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
Transifex - Desenvolvendo uma aplicação complexa na simplicidade do DjangoTransifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
Transifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
Diego Búrigo Zacarão
 

Semelhante a Uma implementação de suporte a (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Treinamento ORM .Net
Treinamento ORM .NetTreinamento ORM .Net
Treinamento ORM .Net
 
Transifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
Transifex - Desenvolvendo uma aplicação complexa na simplicidade do DjangoTransifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
Transifex - Desenvolvendo uma aplicação complexa na simplicidade do Django
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Django
DjangoDjango
Django
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Postgresql 50 Sabores - PgDay Ceará 2013
Postgresql 50 Sabores - PgDay Ceará 2013Postgresql 50 Sabores - PgDay Ceará 2013
Postgresql 50 Sabores - PgDay Ceará 2013
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 

Mais de Rômulo Jales

IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
Rômulo Jales
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+
Rômulo Jales
 

Mais de Rômulo Jales (9)

Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasConhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Introdução a Model Based User Interface Design
Introdução a Model Based User Interface DesignIntrodução a Model Based User Interface Design
Introdução a Model Based User Interface Design
 
Bridge GoF Patern
Bridge GoF PaternBridge GoF Patern
Bridge GoF Patern
 
Usando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosUsando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuários
 
Seminario pic
Seminario picSeminario pic
Seminario pic
 
DKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module SupportDKMS ­ Dynamic Kernel Module Support
DKMS ­ Dynamic Kernel Module Support
 
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Último (6)

[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdf
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdf
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
 

Uma implementação de suporte a

  • 1. Implementação de Acesso a múltiplos Bancos de dados no Django 1.1. Rômulo Jales - romulo@romulojales.com www.romulojales.com
  • 2. Quem vos fala? ● Engenheiro da Computação ● FITec ● Envolvimentos: – Linux – Embarcados – Sistemas Distribuídos – Python – C – ShellScript
  • 3. Agenda ● O que é Django? ● Análise do caso ● A solução ● Resultados ● Demonstração
  • 4. O que é Django? ● Um framework web de alto nível ● Escrito em Python ● Estimula o desenvolvimento rápido e limpo ● Implementa o conceito DRY “Um framework para perfeccionistas com deadlines” ● www.djangoproject.org
  • 5. Quem usa o django? ● globo.com ● washingtonpost.com ● E outros 3575 cadastrados no http://www.djangosites.org/!
  • 6. O que é django?
  • 7. Análise de caso ● O que eu quero? ● Como o Django acessa um banco? ● Quem são as classes e entidades? ● Tenho know how para propor uma solução?
  • 8. O que eu quero? Qual a minha necessidade? O que eu tenho?
  • 9. Django 1.1 ● Não acessa múltiplos bandos de dados ● Versão homologada em produção ● Acesso a bancos legados ● Sistema heterogêneo – Postgresql e MS SqlServer
  • 10. Como o Django acessa um banco? ● Classes do tipo Model ● Model <= Managers A Manager is the interface through which database query operations are provided to Django models. At least one Manager exists for every model in a Django application. ● Atributo object é um manager – FOO.object.get_all()
  • 11. Managers ● Como o Manager se conecta com um banco? ● Classe de interface? E a implementação? ● Tudo se resume ao método get_query_set
  • 12. QuerySet ● Represents a lazy database lookup for a set of objects. ● Obejo query, inicialização: – Instância de Model – django.db.connection ● django/db/__init__.py
  • 14. DataBaseWrapper ● Instância de backend de banco ● load_backend(settings.DATABASE_ENGINE ) ● Daqui para frente é específico ao banco
  • 15. Recapitulando Model Manager QuerySet query Settings
  • 16. O que preciso fazer? ● Indexar as conf de banco no settings e ler! ● Estruturar a informação ● Reusar as classes existentes ● Manter compatibilidade
  • 17. Novas infraestrutura ● QuerySet – Permitir que query aceite um banco por parâmetro ● Manager – Usar o novo QuerySet
  • 20. E para o usuário? ● github.com/romulojales/django-multidb ● Copie na raiz do seu projeto ● Configurar no settings.py os novos bancos ● Crie um dicionário SECONDARY_DB – Chave é o banco – Valor é um dicionário com as configurações do banco, tal qual o padrão.
  • 21. E para o usuário? ● Na classe model: ● _default_manager = MultiBdManager(“BANCO”)
  • 22. Resultados def get_op_from_scf(serial): import _mssql mssql = _mssql.connect('IP_DO_SERVER','linux','SENHA') query = "SELECT OP FROM CONSULTA_OP WHERE NUMEROSERIE = '"+serial+"'" mssql.query(query) ret = mssql.fetch_array() If ret[0][1] == 0: raise Exception("Nao existe nenhuma OP para o numero de serie informado: " + str(serial)) op = ret[0][2][0][0] return op.strip()
  • 23. Resultados class OPLEGADO(Model): class Meta: db_table = "CONSULTA_OP" managed = False _default_manager = MultiBdManager("scf") op = CharField(max_length=13,primary_key=True) numeroserie = CharField(max_length=26) def get_op_from_scf(serial): op = OPLEGADO.objects.get(numeroserie=serial) If op: return op else: raise Exception(“"Nao existe nenhuma OP para o numero de serie informado: " + str(serial))
  • 24. Limitações ● Não sincroniza todos os bancos simultaneamente! ● Funciona apenas para versões >= 1.1 do Django.
  • 25. Futuro Terminar implementação dos sinais: – O usuário precisará apenas do objeto sec_db_name ● Django 1.2 implementa multibd
  • 26. MultiBd no 1.2 ● http://docs.djangoproject.com/en/1.2/topics/db/multi-db/ ● CRUD, parametro using ● settings.py -> Databases ● Objeto connections virou um dicionário ● Não sincroniza todos os BD simultaneamente