Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Amaral de Campos

Oracle - Mysql - Python

Recommended Posts

Boa noite caros amigos do Imasters!

 

Estou com um problema interessante aqui e já esgotei minhas todas as fontes de pesquisa (google!) para tentar resolver e espero que vocês possam me ajudar.

 

É o seguinte:

Eu migrei um banco de dados Mysql para o ORACLE (10.2) usando o migrate tools do SQLDeveloper.

Isso foi tranquilão. O banco foi importado sem erros e tudo mais.

 

A aplicação que vai usar o novo banco oracle é feito no Zope (o Zope é feito em Python).

As consultas da camada de dados desta aplicação rodam 100% sem nenhum problema. Todos os dados são retornados corretamente.

Porém, os scripts python que executam essas consultas e que acessam os dados do result set é que geram o problema.

Veja o porque:

 

  • Eu tenho um arquivo chamado consulta.Zsql que é basicamente o select do banco. Ele só contém a query que será executada pelo próximo script.
  • O script retorno.py é o "executável". Quando eu rodo ele, o script de consulta é executado e os dados são armazenados numa estrutura de dicionários do python.

    ---- Exemplo do script retorno.py ----

    retornoDosDados = consulta(parametro).dictionaries()

    (no caso, a variável retornoDosDados ficaria com o valor como [{CUSTOPRODUTO:'valor1'},{QUANTIDADEPRODUTO:'valor2'}]... os campos estão em maiúsculo pois foram mapeados de acordo com o retorno do Oracle)

     

    return retornoDados['CustoProduto]*retornoDados['QuantidadeProduto]

    (aqui estão em minúsculo pois foram programados na época que utilizavamos o Mysql, onde as colunas foram criadas desta forma no banco)

O problema está no retorno deste dicionário. Quando o banco era Mysql, o nome das colunas seguia o padrão parecido com o exemplo (QuantidadeProduto).

 

Agora que migramos para o Oracle, as colunas foram convertidas automaticamente de CustoProduto e QuantidadeProduto para CUSTOPRODUTO e QUANTIDADEPRODUTO.

 

Aí está o problema.

O python é Case Sensitive! O comando return retornoDados['CustoProduto']*retornoDados['QuantidadeProduto'] irá falhar porque o nome das colunas que retornaram do banco estão em maiúsculo! Então o python tenta procurar o campo CustoProduto mas não acha, dando assim um erro de chave de dicionário.

 

Minha pergunta é a seguinte:

É possível alterar esta configuração do oracle para que objetos mantenham o nome que informamos?

Ou ele sempre irá converter para maiúsculo, não importando se a coluna foi criada com CamelCase?

Outra coisa, criar as colunas com aspas duplas também não me serve, porque de qualquer maneira eu teria que alterar a aplicação para incluir as aspas nas chaves dos campos ( algo como retornoDados['"CustoProduto"'] ).

Ah sim, estou tentando resolver o problema no Oracle pois a aplicação já está em produção há um bom tempo e alterar nome de variáveis em cerca de 700 scripts pode dar um problema enorme!

 

É isso. Me desculpem se o texto ficou confuso, mas tentei colocar o máximo de informação sobre o problema.

 

Grato desde já pela ajuda,

Guilherme Campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matutei com seu problema e não vi solução para Oracle, os objetos teriam de ser criados entre aspas para se ter o nome em caixa baixa, assim nem sinônimos resolveriam seu problema.

 

Talvez algum parametro do Oracle que permita se trabalhar como case sensitive que não conheço e como estou sem a documentação aqui não tenho como consultar.

 

Talvez o Manual de Adminitration tenha algo, mas acho difícil.

 

A Função RetornaDados no Python não poderia ser alterada para fazer este tratamento ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.