Executando verificação de segurança...
1

Como usar o ORM do Django em qualquer aplicação

Introdução

O Django é um dos principais frameworks pra desenvolvimento web em python.
Ele possui incontáveis recursos e um dos melhores é seu módulo ORM.

Django ORM

O ORM do django consegue trablhar com os principais SGBDs do mercado, usando extamente o mesmo código, apenas mudando a configuração de conexão ao SGBD desejado.

Para acessar um db usado o Django ORM basta criar uma classe que herde de models.Model e definir os campos desejados.

from django.db import models

class Pessoa(models.Model):
    nome = models.CharField(max_length = 100)
    email = models.EmailField(max_length = 100)
    
    def __str__(self):
        return self.nome

Agora, para objer todos os registros do banco basta chamar o método all().

pessoas = Pessoa.objects.all()

Isso vai te retornar um QuerySet iterável.

Como eu já trabalhava com o Django, me perguntei se seria possível usar apenas o módulo ORM em outras aplicações, web ou não.

E sim, dá pra fazer isso sem maiores dificuldades, apenas com algum código para inicializar a ORM.

Usando o ORM do Django em qualquer aplicação

Será necessário criar uma pequena estrutra apenas para iniciar o django e definir algumas configurações.

Código necessário

Antes de tudo, crie uma pasta para o seu projeto.
Primeiramente deve-se criar um arquivo com o nome manage.py que vai configurar o django e também executar as ferramentas de gerenciamento.
Depois precisaremos de um arquivo chamado settings.py que vai efetivamente configurar o django através de variáveis obtidas de um arquivo chamado .env
Como esse arquivo vai conter informações sensíveis como senhas de banco de dados, ele não deve ser incluído no sistema de versionamento, use um arquivo .env.example apenas com as variáveis definidas sem seus valores.
A única configuração que vai ser necessária nesse arquivo será a definição da variável INSTALLED_APPS para que o model funcione e também a conexão ao banco de dados.
No nosso exemplo usaremos o sqlite mas vai funcionar com qualquer banco de dados suportado pelo djando. Eu mesmo tenho uma aplicação usando o PostgreSQL.

manage.py

#!/usr/bin/env python

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Após isso, crie um arquivo chamado settings.py

settings.py

import os, environ

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

env = environ.Env()
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

SECRET_KEY = env('SECRET_KEY')

DEFAULT_AUTO_FIELD='django.db.models.AutoField'

DATABASES = {
    'default': {
        'ENGINE': env('SQL_ENGINE'),
        'NAME': env('SQL_NAME'),
        'USER': env('SQL_USER'),
        'PASSWORD': env('SQL_PASSWORD'),
        'HOST': env('SQL_HOST'),
        'PORT': env('SQL_PORT'),
    }
}

INSTALLED_APPS = ("db",)

TIME_ZONE = env('TIME_ZONE')

Finalmente o arquivo .env terá os dados necessários para acessar o banco.

SECRET_KEY=SuaChaveSecretaDaAoplicacao
SQL_ENGINE=django.db.backends.sqlite3
SQL_NAME=nomedobanco.db
SQL_USER=usuariodobanco
SQL_PASSWORD=senhadobanco
SQL_HOST=127.0.0.1
SQL_PORT=5432
TIME_ZONE=America/Sao_Paulo

As varíaveis SQL_USER, SQL_HOST e SQL_PORT não são necessárias para o sqlite.

Um módulo chamado db deve ser criado para conter os models da aplicação:

db/models.py

from django.db import models

class Pessoa(models.Model):
    nome = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)

    def __str__(self):
        return self.nome

Crie também um arquivo vazio db/__init__.py para dizer que esta pasta é um módulo.

Agora temos duas opções, a primeria é criar a aplicação desejada e já incluir os módulos criados acima. Outra opção (é a que uso) é criar uma aplicação genérica e sempre que for criar um aplicação, extender essa aplicação básica. Deste modo sempre que for criar uma nova aplicação basta reusar o esqueleto criado acima.
Vou explicar essa abordagem.

Crie um arquivo chamado appbase.py

appbase.py

""" Aqui importamos apenas as partes do Django necessárias.
É recomendado não alterar o código deste módulo """

import sys
sys.dont_write_bytecode = True

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
import django
django.setup()

from settings import env
import settings

from db.models import *

Nosso esqueleto de aplição vai ficar assim

|-- db
    |-- __init__.py
    |-- models.py
| manage.py
| settings.py

Antes de continuarmos, precisamentos criar o virtualenv e instalar alguns módulos.

Para criar e ativar o virtualenv, entre no diretório que você criou a aplicação e execute os comandos abaixo:

# 1 - Cria o virtual env
python -m venv venv

# 2 - Ativa o virtual env
source venv/bin/activate

# 3 - Instala os módulos necessários
pip install django django-environ

Obs.
Nas próximas vezes que for executar a aplicação, apenas o passo 2 acima será necessário

Agora precisamos apenas criar as migrations e executá-las.
Migrações é forma que o ORM do django manipula alterações nos modelos do banco de dados. Sempre que fizermos alguma alteração na model, precisar criar e executar as migrações novamente.

# Cria as migrações
python manage.py makemigratinos db

# Executa as migrações
python manage.py migrate

Com os código explicados acima agora fica fácil criar qualquer aplicação que use o ORM do django como no exemplo abaixo:

main.py

from appbase import *

# Insere pessoas no banco de dados
Pessoa(nome='Pessoa 1', email='[email protected]').save()
Pessoa(nome='Pessoa 2', email='[email protected]').save()
Pessoa(nome='Pessoa 3', email='[email protected]').save()
Pessoa(nome='Pessoa 4', email='[email protected]').save()
Pessoa(nome='Pessoa 5', email='[email protected]').save()

# Lista todas as pessoas cadastradas no banco e imprime no console
print("Lista de pessoas")
for pessoa in Pessoa.objects.all():
    print(f"nome: {pessoa.nome}, email: {pessoa.email}")
print("")

Conclusão

Neste texto expliquei como usar o ORM do django para criar uma aplicação que o utilize, sem executar o django completo.

Espero que tenha sido útil.

Carregando publicação patrocinada...