W3docs

MySQL Criar Banco de Dados

Aprenda a criar um banco de dados MySQL em Python com mysql-connector-python, com exemplos de conexão, criação, listagem e seleção de bancos de dados.

Este capítulo explica como criar um banco de dados MySQL a partir do Python usando a biblioteca mysql-connector-python. Você aprenderá como conectar-se a um servidor MySQL, executar a instrução CREATE DATABASE, listar os bancos de dados disponíveis e selecionar um banco de dados para consultas subsequentes.

Se você ainda não instalou o conector, consulte primeiro MySQL Primeiros Passos. Depois que o banco de dados existir, o próximo passo é criar tabelas.

Instalando o Conector MySQL

Instale o driver oficial do MySQL para Python com o pip:

pip install mysql-connector-python

Este pacote funciona com Python 3.6 e versões posteriores e não requer uma extensão C separada.

Conectando ao Servidor MySQL

Antes de criar um banco de dados, você deve abrir uma conexão com o servidor MySQL. Forneça o endereço do host, uma conta de usuário e a senha dessa conta. Observe que você não especifica um database neste estágio — o banco de dados ainda não existe.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

print(mydb)   # <mysql.connector.connection.MySQLConnection object at 0x...>
mydb.close()

Se os detalhes de conexão estiverem incorretos, mysql.connector.connect() lança mysql.connector.errors.InterfaceError. Envolva a chamada em um bloco try/except em código de produção.

Criando um Banco de Dados

Uma vez conectado, obtenha um cursor e execute a instrução SQL CREATE DATABASE. O cursor é o objeto através do qual todos os comandos SQL são enviados.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

mycursor.close()
mydb.close()

Se mydatabase já existir, o servidor lança um erro. Adicione IF NOT EXISTS para tornar a instrução idempotente — ela é bem-sucedida independentemente de o banco de dados ser novo ou já existir:

mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")

Regras de nomenclatura de bancos de dados

  • Os nomes podem conter letras, dígitos e sublinhados (_).
  • Os nomes são insensíveis a maiúsculas e minúsculas no Windows e sensíveis a maiúsculas e minúsculas na maioria das configurações Linux.
  • O comprimento máximo é de 64 caracteres.
  • Evite palavras reservadas como database, table ou select como nomes de banco de dados; se precisar usá-las, coloque o nome entre crases no SQL.

Definindo um conjunto de caracteres

Por padrão, o MySQL usa o conjunto de caracteres padrão do servidor (geralmente utf8mb4 em instalações modernas). Você pode especificar o conjunto de caracteres e a collation explicitamente para garantir um comportamento consistente em diferentes servidores:

mycursor.execute(
    "CREATE DATABASE IF NOT EXISTS mydatabase "
    "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
)

utf8mb4 armazena o intervalo completo de Unicode (incluindo emoji). utf8mb4_unicode_ci é uma collation insensível a maiúsculas e minúsculas e a acentos, adequada para a maioria das aplicações web.

Listando Bancos de Dados Existentes

Após criar o banco de dados, você pode verificar se ele existe executando SHOW DATABASES, que retorna uma linha por banco de dados:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")

for (db_name,) in mycursor:
    print(db_name)

mycursor.close()
mydb.close()

Cada linha retornada por SHOW DATABASES é uma tupla de um elemento, então o desempacotamento (db_name,) extrai a string diretamente. A saída típica se parece com:

information_schema
mydatabase
mysql
performance_schema
sys

Para verificar apenas se o seu banco de dados específico existe, você pode filtrar em Python:

mycursor.execute("SHOW DATABASES")
databases = [row[0] for row in mycursor]

if "mydatabase" in databases:
    print("Database found.")
else:
    print("Database not found.")

Selecionando um Banco de Dados

Depois que um banco de dados existe, passe seu nome como argumento database ao abrir a conexão — este é o padrão normal para todo o trabalho subsequente:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="mydatabase"   # select the database here
)

mycursor = mydb.cursor()
# All queries now run against mydatabase
mycursor.close()
mydb.close()

Você também pode mudar o banco de dados ativo em uma conexão existente sem fechá-la:

mycursor.execute("USE mydatabase")

Isso é útil quando você precisa alternar entre vários bancos de dados no mesmo script, mas passar database= para connect() é mais claro na maioria dos casos de uso.

Tratando Erros

Sempre trate possíveis erros de banco de dados para que sua aplicação falhe graciosamente em vez de travar com uma exceção não tratada:

import mysql.connector
from mysql.connector import Error

mydb = None
try:
    mydb = mysql.connector.connect(
        host="localhost",
        user="yourusername",
        password="yourpassword"
    )
    mycursor = mydb.cursor()
    mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
    print("Database created (or already exists).")
except Error as e:
    print(f"Error: {e}")
finally:
    if mydb is not None and mydb.is_connected():
        mycursor.close()
        mydb.close()

O bloco finally garante que a conexão seja fechada mesmo quando uma exceção é lançada, evitando vazamentos de conexão.

Exemplo Completo

O trecho abaixo combina todas as etapas: criar o banco de dados, verificar se ele aparece em SHOW DATABASES e, em seguida, reconectar com o banco de dados selecionado:

import mysql.connector
from mysql.connector import Error

DB_NAME = "mydatabase"

def create_database():
    try:
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword"
        )
        cursor = conn.cursor()

        # Create the database if it does not exist
        cursor.execute(
            f"CREATE DATABASE IF NOT EXISTS {DB_NAME} "
            "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
        )
        print(f"Database '{DB_NAME}' created (or already exists).")

        # Confirm it appears in the database list
        cursor.execute("SHOW DATABASES")
        databases = [row[0] for row in cursor]
        if DB_NAME in databases:
            print(f"Confirmed: '{DB_NAME}' is listed on the server.")

        cursor.close()
        conn.close()

        # Re-connect with the database selected
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword",
            database=DB_NAME
        )
        print(f"Connected to '{DB_NAME}' successfully.")
        conn.close()

    except Error as e:
        print(f"Error: {e}")

create_database()

Saída esperada ao executar em um servidor MySQL novo:

Database 'mydatabase' created (or already exists).
Confirmed: 'mydatabase' is listed on the server.
Connected to 'mydatabase' successfully.

Próximos Passos

Was this page helpful?