1
resposta

Utilizar banco de dados ja existente no sql apenas para consultas no django

E tenho um banco de dados ja existentes no sql e estou usando o django .

Gostaria de fazer apenas consultas na base de dados , sem alterar nada.

Como faço isso.

Ex: tenho uma tabela chamada SB1010 , quero consultar apenas os campos B1_COD,B1_DESC,B1_UND,B1_TIPO .

SELECT B1_COD,B1_DESC,B1_UND  FROM SB1010 WHERE B1_TIPO='PA'
1 resposta

Olá Claudio, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Para realizar consultas rápidas em um banco de dados podemos utilizar o Django Shell. O Django Shell, servirá para interagirmos rapidamente com o banco de dados ou outros modelos do nosso projeto ou aplicativos. Essa interação será feita utilizando instruções python em sua linha de comando. Deixo abaixo um passo a passo de como realizar essa consulta.

  • Abra o terminal na pasta do seu projeto.

  • Dentro do seu projeto, certifique que o banco que deseja acessar está configurado no arquivo settings.py. Exemplo:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql',
              'NAME': 'NOME DO BANCO',
              'USER': 'SEU USUARIO',
              'PASSWORD': 'SUA SENHA',
              'HOST': 'localhost'
          }
      }
    
  • Execute o comando abaixo para iniciar o Django Shell.

      python manage.py shell
  • Será aberto o Shell. Cole as linhas de comando abaixo para realizar a consulta.

      from django.db import connection
    
      def consulta_banco():
          with connection.cursor() as cursor:
              cursor.execute("SELECT B1_COD,B1_DESC,B1_UND  FROM SB1010 WHERE B1_TIPO='PA'")
              colunas = [col[0] for col in cursor.description]
              return [
                  dict(zip(colunas, linhas))
                  for linhas in cursor.fetchall()
              ]
    
      consulta_banco()
    
  • Nesse momento será apresentado todos os dados que possuem o campo B1_TIPO igual à PA.

    Início da transcrição. Imagem contendo a execução dos passos listados acima, nesta imagem o fundo do terminal está na cor cinza e as letras na cor branca. Final da transcrição.

Caso queira o resultado de uma forma estruturada e com um visual mais dinâmico, podemos criar um template e uma rota para acessar essas informações. Para isso, basta seguir os passos abaixo.

  • No arquivo views.py do app do projeto, declare a seguinte função e salve o arquivo.

      from django.db import connection
      from django.shortcuts import render
    
      def consulta_banco(request):
          with connection.cursor() as cursor:
              cursor.execute("SELECT B1_COD,B1_DESC,B1_UND  FROM SB1010 WHERE B1_TIPO='PA'")
              colunas = [col[0] for col in cursor.description]
              resposta = [
                  dict(zip(colunas, linhas))
                  for linhas in cursor.fetchall()
              ]
              dados = {
                  'dados': resposta
              }
              return render(request, 'consulta.html', dados)
  • Crie um template com o nome consulta.html e adicione as linhas abaixo.

      <style>
          table, th, td {
            border:1px solid black;
            text-align: center;
          }
      </style>
    
      <table>
          <tr>
              <th>B1_COD</th>
              <th>B1_DESC</th>
              <th>B1_UND</th>
          </tr>
          {% for item in dados %}
          <tr> 
              <td>{{ item.b1_cod }}</td>
              <td>{{ item.b1_desc }}</td>
              <td>{{ item.b1_und }}</td>    
          </tr>
          {% endfor %}
      </table>
    
  • Neste momento, declare uma rota no arquivo url.py para acessar o resultado da consulta.

      urlpatterns = [
          path('admin/', admin.site.urls),
          path('consulta/', consulta_banco )
      ]
  • Acessando a url consulta/ será apresentado todos os dados que possuem o campo B1_TIPO igual à PA.

    Início da transcrição. Imagem contendo o resultado do acesso a url: consulta/ nessa imagem é apresentado uma tabela, contendo três colunas, sendo da esquerda para a direita B1_COD, B1_DESC e B1_UND. Essa tabela possui sete linhas preenchidas com dados genéricos, a primeira coluna está preenchida com números decimais inteiros na seguinte sequência 1, 2, 5, 6, 8, 10, 11. A segunda coluna está preenchida com um texto e um número, sendo TESTE 1, TESTE 2, TESTE 5, TESTE 6, TESTE 8, TESTE 10, TESTE 11. A terceira coluna possui números decimais inteiros, sendo 1, 2, 6, 7, 9, 10, 11. Final da transcrição.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!