Table of contents
Hoje veremos como realizar a configuração do banco de dados MySQL utilizando-se o driver mysqlclient no framework web Django.
📝 Código testado no Django 4.2.
📝 O framework Django 4.2 suporta MySQL 8 ou superior.
📝 O framework Django 4.1 suporta MySQL 5.7 ou anterior.
Dependências
Ubuntu
sudo apt install \
python3-dev \
default-libmysqlclient-dev \
build-essential
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('mysql.cnf')),
},
}
}
📝 O arquivo de configuração pode estar em outros diretórios.
No arquivo mysql.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: mysql:8.0.33
container_name: MySQL
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/mysql:/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.