• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Uma implementação de suporte a
 

Uma implementação de suporte a

on

  • 1,283 views

 

Statistics

Views

Total Views
1,283
Views on SlideShare
1,085
Embed Views
198

Actions

Likes
0
Downloads
4
Comments
0

2 Embeds 198

http://pugpe.wordpress.com 193
http://romulojales.com 5

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 Uma implementação de suporte a Presentation Transcript

    • 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