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 5.
📝 O framework Django 5 suporta 8.0.11 ou superior.
Posts relacionados:
- Como criar um if de uma linha em Python
- Como instalar a ferramenta de linha de comando pipX
- Como criar um aplicativo Flutter com Python e o framework Flet
- Como instalar a linguagem de programação Python no macOS
- Como fazer o deploy do Python Sphinx no Github pages
- Como utilizar Python com o banco de dados Microsoft Access
- Como utilizar Python com o banco de dados SQL Server
- Como utilizar o SQLAlchemy com o banco de dados SQL Server
- Como utilizar o Python com MariaDB e MySQL Connector
- Como utilizar o Python com MariaDB e MariaDB Connector
Mysqlclient
O pacote mysqlclient
fornece uma interface para se conectar e interagir com um banco de dados MySQL a partir de um programa Python.
Ele é comumente usado em aplicações Python que precisam armazenar ou recuperar dados de um banco de dados MySQL.
O mysqlclient
é uma implementação de Python da API MySQL desenvolvida em C, o que o torna rápido e eficiente para manipular grandes volumes de dados em um banco de dados MySQL a partir de código Python.
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.3.0
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.