Banco de Dados Existente e Django

297 views
Skip to first unread message

Adauto Serpa

unread,
Apr 20, 2011, 12:11:59 PM4/20/11
to django...@googlegroups.com
Olas Pessoal,

Por favor não me xinguem, talvez seja uma pergunta idiota e sempre quis perguntar isso..srsrsrs

Caso já possua um banco de dados criado como fazer o django ler as tabelas, pois até agora
dos documentos, tutorias e etc que li. eles mostram a construção do models totalmente ligados
ao banco. Tendo que você criar as tabelas exatamente como no models ou executando o comando
python manage.py syncdb
 
Por exemplo conheço um DBA que cria tabelas no banco assim tbNomeTabela, campos cpNomeCampo e
isso está fora do padrão do Django, não é?

Caso eu precise como utilizar o django em um banco de dados já criado ?
Será que posso tem mais domínio entre Django e BD, talvez se preciso nem utilizar o syncdb do Django ?


desde já agradeço,

--
Adauto Serpa
Tecnólogo em Informática
Jabber: adaut...@jabber.org
Email:  adaut...@gmail.com
MSN:   juni...@hotmail.com


Rodrigo de Oliveira

unread,
Apr 20, 2011, 12:15:37 PM4/20/11
to django...@googlegroups.com
http://docs.djangoproject.com/en/1.3/howto/legacy-databases/


--
Django Brasil em Google Groups <http://groups.google.com.br/group/django-brasil>
Associe-se à Python Brasil e suporte nossa comunidade! <http://associacao.python.org.br/>

Alexandre Spengler

unread,
Apr 20, 2011, 12:19:49 PM4/20/11
to django...@googlegroups.com
Outra solução, é simplesmente trocar o nome padrão das tabelas que o Django cria, da uma olhada em db_table (http://docs.djangoproject.com/en/dev/ref/models/options/#table-names).

abs,

Alexandre Santos Spengler
skype: alexadre-spengler

"Mantenha-se faminto por coisas novas, mantenha-se certo de sua ignorância. Continue ávido por aprender, continue ingênuo e humilde para procurar. Tenha fome de vida, sede de descobrir."



2011/4/20 Rodrigo de Oliveira <r.ef...@gmail.com>

Adauto Serpa

unread,
Apr 21, 2011, 11:55:42 PM4/21/11
to django...@googlegroups.com
Pessoal,

Pelo que estou vendo não é fácil trabalhar com bancos legados, o django é pouco flexível a isso.
Com a dica do Alexandre e a do Rodrigo penso no seguinte modo de trabalhar.
Crio meu model e identifico na class Meta minha tabela, depois vou ter que usar os mesmos nomes da tabela já criados.
Exemplo: cpIdUsuario, acho que no python/Django seria id_usuario
Me corrijam aqui se eu estiver enganado !!!! Exemplo do model

class ModelX:
   cpIdUsuario = models.CharField(max_length=15)

   class Meta:
       db_table = 'tbUsuario'

Seria bom desenvolver um modo de fazer um alias, atrelando o nome do campo da tabela mais o nome do atributo no model.
Talvez quem sabe da mesma maneira que definimos o nome da tabela, ou talvez num array... Acho que é algo a se pensar....

Encontrei uma pergunta semelhante a minha anteriormente aqui na lista, o pessoal estava comentando sobre o inspectdb para
a geração dos models, mas acredito que a criação dos models manualmente nesses casos seria melhor aceita, principalmente
se houvesse o recurso que mencionei acima. Ainda mais que o syncdb não faz alter na tabela, para funcionar automaticamente
nem sei por onde começar...rsrsrs

att.

Adauto Serpa

marcos thomaz

unread,
Apr 22, 2011, 12:31:13 AM4/22/11
to django...@googlegroups.com
Temos aqui na instituição um banco de dados legado (DB2). O sistema original é desenvolvido em Delphi. Usei o inspectdb para gerar as classes a partir do banco (colocando as tags db_table no class Meta e o dbfield pros campos). O trabalho propriamente dito, foi apenas para organizar os Models em Apps diferentes (apenas para deixar organizado). Bem, no restante, não mexi uma palha. Foi trabalhar normalmente como se o banco tivesse sido criado a partir dos models do django. A aplicação ficou muito boa e funcionou perfeitamente.  Bem, esse é um caso que tive, onde cada tabela possuía um campo que era chave primária da tabela.
Tivemos um outro, onde o banco possuía umas tabelas cuja chave primária era composta por mais de um campo. Esse deu um certo trabalho, pois para facilitar o trabalho, criei um campo único, chave primária para essas tabelas, e a antiga chave primária, troquei por uma chave única (definindo também no unique_together do class Meta). Depois disso, usei o inspectdb, e organizei em apps. Ficou show e também funcionou. Enfim, não achei tão oneroso assim.
 
[]'s

Marcos Thomaz

De: Adauto Serpa <adaut...@gmail.com>
Para: django...@googlegroups.com
Enviadas: Sexta-feira, 22 de Abril de 2011 0:55
Assunto: Re: Banco de Dados Existente e Django

Adauto Serpa

unread,
Apr 23, 2011, 8:47:45 PM4/23/11
to django...@googlegroups.com
Marcos/Pessoal,

Não conhecia a atributo dbfield, nem encontrei na documentação talvez tenha passado direto.
Então fui a pesquisa e encontrei o db_column, acho que você queria dizer esse, não é ?
Se for, a descrição da coluna fica no próprio local da descrição dos atributos e não na class Meta
Bom isso é o que tinha falado no email anterior. E o django já possui essa funcionalidade... Muito Showw...

Então seria assim um exemplo do Model

class Usuario(models.Model):
    id_usuario = models.CharField(max_length=15, db_column='cpIdUsuario')
    ....

    class Meta:
        db_table = 'tbUsuario'


Valeu Pessoal, graças a vocês acho que consegui entender como montar a estrutura dos models para um
banco legado(legacy database).

Adauto Serpa

marcos thomaz

unread,
Apr 23, 2011, 9:03:10 PM4/23/11
to django...@googlegroups.com
Exatamente Adauto, desculpe pela falha... a cabeça deu um pane aqui e acabei misturando informações... heheh 
Mas é isso mesmo.
 
[]'s

Marcos Thomaz
Enviadas: Sábado, 23 de Abril de 2011 21:47
Reply all
Reply to author
Forward
0 new messages