Photo by Stephen Phillips - Hostreviews.co.uk on Unsplash
Configurando o banco de dados MariaDB no framework Django
Table of contents
Hoje veremos como realizar a configuração do banco de dados MariaDB utilizando o driver mysqlclient no framework web Django.
📝 Código testado no Django 4.2.
📝 O framework Django 4.2 suporta MariaDB 10.4 ou superior.
Para ver como configurar o framework web Django com outros bancos de dados:
O mysqlclient
é o driver recomendado pela documentação do Django.
Dependências
Ubuntu
Site oficial do Ubuntu.
sudo apt install \
python3-dev \
default-libmysqlclient-dev \
build-essential
Fedora
Site oficial do Fedora.
sudo dnf install \
python3-devel \
mysql-devel
Instalação
pip install mysqlclient
Caso não tenha acesso a instalar as dependências para compilação do pacote mysqlclient
é possível instalar o pacote pré compilado através do comando:
pip install --only-binary :all: mysqlclient
Conexão
A configuração da conexão é feita na variável DATABASES
do arquivo settings.py
:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'USER': 'dbuser',
'PASSWORD': '123456',
'HOST': '0.0.0.0',
'PORT': '3306',
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
'charset': 'utf8mb4',
},
}
}
Onde:
ENGINE
: Driver será usado pelo Django.NAME
: Nome do database que será usado nessa conexão.USER
: Nome do usuário que irá utilizar o banco. Usuário deve ter as permissões necessária para manipular o banco.PASSWORD
: Senha do usuário.HOST
: IP ou nome do computador onde o banco de dados está sendo executado.PORT
: Porta que o banco de dados está utilizando. O padrão é 3306.
🚨 No código acima os valores das variáveis estão sendo passados hardcoded.
Se possível evite fazer isso, de preferência pela utilização de variáveis de ambiente ou arquivos
.env
.
Também é possível utilizar um arquivo com os parâmetros de conexão, para isso:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
'read_default_file': str(BASE_DIR.joinpath('mariadb.cnf')),
},
}
}
📝 O arquivo de configuração pode estar em outros diretórios.
No arquivo mariadb.cnf
:
[client]
database = database_name
user = dbuser
password = 123456
host = 0.0.0.0
port = 3306
default-character-set = utf8mb4
📝 Lembre-se de adequar conforme as suas necessidades.
Extra
Docker compose
Configuração do banco que foi utilizada nos testes com o framework web Django (docker-compose.yml
):
# docker-compose.yml
# [Docker](https://docs.docker.com/):
# - `docker-compose up`.
# - `docker-compose down`.
# [podman](https://podman.io/) - [podman-compose](https://github.com/containers/podman-compose):
# - `podman-compose up`.
# - `podman-compose down.
services:
db:
image: mariadb:11.0.1-rc-jammy
container_name: MariaDB
restart: on-failure
# Não utilizar em produção.
command: --default-authentication-plugin=mysql_native_password
# Privileged para evitar o erro: '/var/lib/mysql/': Permission denied.
privileged: true
volumes:
- ../databases/mariadb:/var/lib/mysql
ports:
- '3306:3306'
environment:
MYSQL_USER: dbuser
MYSQL_PASSWORD: 123456
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: database_name
📝 Arquivo
docker-compose.yml
testado com podman-compose.