MySQL — Primeiros Passos
Aprenda a conectar Python a um banco de dados MySQL com mysql-connector-python. Instalação, conexão, criação de bancos de dados e consultas.
Python pode se comunicar com bancos de dados MySQL através do driver oficial MySQL Connector/Python. Este capítulo mostra como instalar o driver, estabelecer uma conexão, criar um banco de dados e executar suas primeiras consultas — fornecendo uma base sólida antes de avançar para criação de tabelas, inserção de linhas e consulta de dados.
O que Você Precisa
Antes de escrever qualquer código, você precisa de duas coisas:
- Python 3.7 ou superior instalado em sua máquina.
- Um servidor MySQL em execução — seja uma instalação local (MySQL Community Server) ou uma instância na nuvem (PlanetScale, Amazon RDS, etc.).
Você não precisa criar um banco de dados com antecedência; você o criará a partir do Python em uma seção posterior.
Instalando o MySQL Connector/Python
MySQL Connector/Python é o driver oficial do MySQL mantido pela Oracle. Instale-o com pip:
pip install mysql-connector-pythonVerifique a instalação:
import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0Se você vir um número de versão, o driver está pronto para uso.
Por que mysql-connector-python e não PyMySQL?
Ambos os drivers funcionam, mas mysql-connector-python é o driver oficialmente suportado pela Oracle. Ele usa uma implementação em Python puro por padrão e, opcionalmente, uma extensão C para melhor desempenho. PyMySQL é uma alternativa popular da comunidade com uma API quase idêntica. Os capítulos desta seção utilizam mysql-connector-python.
Conectando a um Servidor MySQL
Use mysql.connector.connect() para abrir uma conexão. Passe suas credenciais como argumentos nomeados:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
if connection.is_connected():
print("Connected to MySQL Server")
connection.close()Substitua yourusername e yourpassword pelas suas credenciais reais. O valor de host é "localhost" quando o MySQL está em execução na mesma máquina; use um endereço IP ou hostname para um servidor remoto.
Mantendo credenciais fora do código-fonte
Inserir senhas diretamente em scripts é um risco de segurança. Armazene-as em variáveis de ambiente e leia-as em tempo de execução:
import mysql.connector
import os
connection = mysql.connector.connect(
host=os.environ.get("MYSQL_HOST", "localhost"),
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD")
)
print("Connected:", connection.is_connected())
connection.close()Defina as variáveis no seu shell antes de executar o script:
export MYSQL_USER=yourusername
export MYSQL_PASSWORD=yourpassword
python connect.pyCriando um Banco de Dados
Uma vez conectado ao servidor (sem especificar um banco de dados), você pode criar um com uma instrução CREATE DATABASE. Execute-a através de um cursor — um objeto que envia comandos SQL e recupera resultados.
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created")
cursor.close()
connection.close()A cláusula IF NOT EXISTS evita um erro caso o banco de dados já exista.
Listando bancos de dados
Você pode verificar se o banco de dados foi criado listando todos os bancos de dados no servidor:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
for db in cursor:
print(db)
cursor.close()
connection.close()Cada linha é retornada como uma tupla, então você verá uma saída como:
('information_schema',)
('mydatabase',)
('mysql',)
('performance_schema',)
('sys',)Conectando a um Banco de Dados Específico
Depois que o banco de dados existir, inclua o parâmetro database ao conectar para que todas as consultas subsequentes sejam executadas contra ele:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Database in use:", connection.database)
connection.close()Usando um Gerenciador de Contexto (Padrão Recomendado)
Chamar .close() manualmente em cada conexão e cursor é propenso a erros — se uma exceção ocorrer antes de .close(), a conexão vaza. Use um bloco try/finally, ou melhor ainda, envolva o cursor em uma instrução with:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
try:
with connection.cursor() as cursor:
cursor.execute("SELECT DATABASE()")
row = cursor.fetchone()
print("Current database:", row[0])
finally:
connection.close()O bloco with fecha o cursor automaticamente quando o bloco termina, mesmo que uma exceção seja lançada.
Tratando Erros de Conexão
Problemas de rede ou credenciais incorretas lançam mysql.connector.Error. Sempre trate essa exceção em código de produção:
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Connection successful")
except Error as e:
print(f"Error connecting to MySQL: {e}")
finally:
if "connection" in dir() and connection.is_connected():
connection.close()
print("Connection closed")Erros comuns que você pode encontrar:
| Código de erro | Significado |
|---|---|
| 1045 | Acesso negado — nome de usuário ou senha incorretos |
| 2003 | Não é possível conectar ao host — servidor não está em execução ou host/porta incorretos |
| 1049 | Banco de dados desconhecido — o nome do database não existe |
Referência Rápida: Parâmetros de Conexão
| Parâmetro | Tipo | Descrição |
|---|---|---|
host | str | Hostname ou IP do servidor MySQL (padrão "127.0.0.1") |
port | int | Porta do MySQL (padrão 3306) |
user | str | Nome de usuário do MySQL |
password | str | Senha do MySQL |
database | str | Banco de dados a selecionar ao conectar |
charset | str | Conjunto de caracteres (padrão "utf8mb4") |
connect_timeout | int | Segundos para aguardar a conexão (padrão 10) |
use_pure | bool | True = Python puro; False = extensão C se disponível |
O que Vem a Seguir
Com uma conexão funcionando, você está pronto para avançar:
- Criar uma tabela — defina colunas e tipos de dados com
CREATE TABLE. - Inserir linhas — adicione dados com
INSERT INTOe consultas parametrizadas. - Consultar dados — recupere linhas com
SELECT,fetchone()efetchall(). - Filtrar linhas — restrinja resultados com cláusulas
WHERE. - Criar um banco de dados — guia completo do comando
CREATE DATABASE.