Uma implementação de suporte a
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Uma implementação de suporte a

on

  • 1,372 views

 

Statistics

Views

Total Views
1,372
Views on SlideShare
1,159
Embed Views
213

Actions

Likes
0
Downloads
4
Comments
0

4 Embeds 213

http://pugpe.wordpress.com 206
http://romulojales.com 5
https://pugpe.wordpress.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Uma implementação de suporte a Presentation Transcript

  • 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
  • 13. django.db.connection
  • 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
  • 18. MultiBDManager
  • 19. MultiBDBaseQuery
  • 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
  • 27. Demonstração