W3docs

MySQL Crear Base de Datos

Aprende a crear una base de datos MySQL en Python con mysql-connector-python: conexión, creación, listado y selección de bases de datos.

Este capítulo explica cómo crear una base de datos MySQL desde Python usando la biblioteca mysql-connector-python. Aprenderás a conectarte a un servidor MySQL, ejecutar la instrucción CREATE DATABASE, listar las bases de datos disponibles y seleccionar una base de datos para las consultas posteriores.

Si aún no has instalado el conector, consulta primero MySQL Primeros Pasos. Una vez que la base de datos exista, el siguiente paso es crear tablas.

Instalación del conector MySQL

Instala el controlador MySQL oficial para Python con pip:

pip install mysql-connector-python

Este paquete funciona con Python 3.6 y versiones posteriores y no requiere una extensión C separada.

Conexión al servidor MySQL

Antes de crear una base de datos debes abrir una conexión al servidor MySQL. Proporciona la dirección del host, una cuenta de usuario y la contraseña de esa cuenta. Ten en cuenta que no especificas una database en esta etapa — la base de datos aún no 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()

Si los datos de conexión son incorrectos, mysql.connector.connect() lanza mysql.connector.errors.InterfaceError. Envuelve la llamada en un bloque try/except en el código de producción.

Creación de una base de datos

Una vez conectado, obtén un cursor y ejecuta la instrucción SQL CREATE DATABASE. El cursor es el objeto a través del cual se envían todos los comandos SQL.

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()

Si mydatabase ya existe, el servidor lanza un error. Añade IF NOT EXISTS para que la instrucción sea idempotente — tiene éxito tanto si la base de datos es nueva como si ya existe:

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

Reglas de nomenclatura de bases de datos

  • Los nombres pueden contener letras, dígitos y guiones bajos (_).
  • Los nombres no distinguen mayúsculas de minúsculas en Windows y sí las distinguen en la mayoría de configuraciones de Linux.
  • La longitud máxima es de 64 caracteres.
  • Evita palabras reservadas como database, table o select como nombres de bases de datos; si debes usarlas, encierra el nombre entre comillas invertidas en SQL.

Configuración del juego de caracteres

Por defecto MySQL usa el juego de caracteres predeterminado del servidor (normalmente utf8mb4 en instalaciones modernas). Puedes especificar el juego de caracteres y la intercalación explícitamente para garantizar un comportamiento consistente en diferentes servidores:

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

utf8mb4 almacena el rango Unicode completo (incluidos emojis). utf8mb4_unicode_ci es una intercalación sin distinción de mayúsculas ni acentos, adecuada para la mayoría de aplicaciones web.

Listado de bases de datos existentes

Después de crear la base de datos puedes verificar que existe ejecutando SHOW DATABASES, que devuelve una fila por base de datos:

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 fila devuelta por SHOW DATABASES es una tupla de un elemento, por lo que el desempaquetado (db_name,) extrae la cadena directamente. Una salida típica tiene el siguiente aspecto:

information_schema
mydatabase
mysql
performance_schema
sys

Para comprobar únicamente si existe tu base de datos concreta puedes filtrar en Python:

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

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

Selección de una base de datos

Una vez que la base de datos existe, pasa su nombre como argumento database al abrir la conexión — este es el patrón habitual para todo el trabajo posterior:

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()

También puedes cambiar la base de datos activa en una conexión existente sin cerrarla:

mycursor.execute("USE mydatabase")

Esto resulta útil cuando necesitas moverte entre varias bases de datos en el mismo script, aunque pasar database= a connect() es más claro para la mayoría de los casos de uso.

Manejo de errores

Gestiona siempre los posibles errores de la base de datos para que tu aplicación falle de forma controlada en lugar de bloquearse con una excepción no manejada:

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()

El bloque finally garantiza que la conexión se cierre incluso cuando se lanza una excepción, evitando fugas de conexión.

Ejemplo completo funcional

El fragmento a continuación combina todos los pasos: crea la base de datos, verifica que aparece en SHOW DATABASES y luego se vuelve a conectar con la base de datos seleccionada:

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()

Salida esperada al ejecutar contra un servidor MySQL nuevo:

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

Próximos pasos

Was this page helpful?