Conectando o Django ao Banco de Dados Microsoft SQL Server (MSSQL)
Tags: webdev, tutorial, python, django
Published: 2023-11-12 21:27:40

Conectar o Django a um banco de dados Microsoft SQL Server é essencial para muitos projetos. No entanto, é crucial seguir um processo adequado para garantir uma conexão estável e flexível. Este guia detalhado oferece as etapas necessárias para estabelecer essa conexão de maneira eficiente.

#### **Requisitos de Conectividade**

Ao conectar o Django a um banco de dados MSSQL, alguns requisitos devem ser considerados:

- Conectar o Django tanto ao Microsoft SQL Server quanto ao Azure SQL Database.
- Manter as tabelas do banco de dados organizadas em um esquema único.
- Facilitar a configuração das definições do banco de dados.
- Ser capaz de alternar entre diferentes motores de banco de dados (por exemplo, localmente trabalhar com SQLite e em produção com o Banco de Dados Azure SQL).

#### **Pacotes Utilizados**

Para alcançar essa conectividade, usaremos principalmente dois pacotes: `mssql-django` e `django-environ`.

1. **mssql-django**: Este pacote é um fork do django-mssql-backend e utiliza internamente o pacote pyodbc.

2. **django-environ**: Essa ferramenta é empregada para uma configuração mais flexível e fácil, especialmente ao lidar com variáveis de ambiente.

#### **Passos para Configuração**

##### **1. Configurando a Conectividade com o Banco de Dados**

Comece instalando o pacote mssql-django:

```shell
$ pip install mssql-django
```

Após a instalação, atualize o arquivo `settings.py` do seu projeto Django com as informações de conexão. Aqui está um exemplo:

```python
# Configurações de Banco de Dados
DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': 'nomedoseubanco',
        'USER': 'usuario@seuservidor',
        'PASSWORD': 'suasenha',
        'HOST': 'seuservidor.database.windows.net',
        'PORT': '',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    },
}
```

##### **2. Configurando o Esquema do Banco de Dados para a Aplicação Django**

No Django, as tabelas do banco de dados são mantidas no esquema padrão, mas não há uma maneira direta de especificar o esquema para armazenar essas tabelas. No entanto, podemos definir um esquema padrão para o usuário do banco de dados da aplicação:

```sql
IF NOT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'nomedoseuesquema' )
BEGIN
   EXEC('CREATE SCHEMA [nomedoseuesquema] AUTHORIZATION [usuario@seuservidor]');
END

EXEC('ALTER USER [usuario@seuservidor] WITH DEFAULT_SCHEMA = [nomedoseuesquema]');
```

##### **3. Configurando o Banco de Dados usando Variáveis de Ambiente**

Para flexibilidade na configuração, o pacote django-environ pode ser usado. É possível definir variáveis de ambiente para facilitar a configuração do banco de dados.

```python
# Configuração com django-environ
import environ

# Mapeamento do mecanismo mssql para o padrão do Django
environ.Env.DB_SCHEMES['mssql'] = 'mssql'
env = environ.Env(DEBUG=(bool, False))

# Use o banco de dados SQLite se a variável de ambiente DATABASE_URL não estiver definida
# Defina suas variáveis de ambiente conforme necessário
# ...

DATABASES = {
    'default': env.db('DJANGO_DATABASE_URL', default=DEFULT_DATABASE_URL)
}
```

Para finalizar, é possível definir e utilizar variáveis de ambiente para a URL do banco de dados, o nome de usuário e a senha, permitindo uma configuração dinâmica.

#### **Conclusão**

Conectar o Django ao Microsoft SQL Server requer um processo bem estruturado e a utilização de pacotes adequados para garantir uma conectividade estável e flexível. Utilizando o `mssql-django` e o `django-environ`, é possível configurar e administrar a conexão de maneira eficiente, facilitando a transição entre diferentes motores de banco de dados e garantindo a organização adequada das tabelas.

Com este guia, espera-se que a configuração e a manutenção da conexão entre o Django e o MSSQL sejam simplificadas, permitindo um desenvolvimento mais fluido e eficiente em suas aplicações.