W3docs

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-python

Verifique a instalação:

import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0

Se 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.py

Criando 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 erroSignificado
1045Acesso negado — nome de usuário ou senha incorretos
2003Não é possível conectar ao host — servidor não está em execução ou host/porta incorretos
1049Banco de dados desconhecido — o nome do database não existe

Referência Rápida: Parâmetros de Conexão

ParâmetroTipoDescrição
hoststrHostname ou IP do servidor MySQL (padrão "127.0.0.1")
portintPorta do MySQL (padrão 3306)
userstrNome de usuário do MySQL
passwordstrSenha do MySQL
databasestrBanco de dados a selecionar ao conectar
charsetstrConjunto de caracteres (padrão "utf8mb4")
connect_timeoutintSegundos para aguardar a conexão (padrão 10)
use_pureboolTrue = 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:

Was this page helpful?