Crear tablas en MySQL usando Python
Aprende a crear tablas MySQL en Python con mysql-connector-python. Cubre CREATE TABLE, tipos de datos, restricciones, IF NOT EXISTS y SHOW TABLES.
Crear una tabla es el primer paso para almacenar datos estructurados en MySQL. Este capítulo muestra cómo definir y crear una tabla MySQL desde Python usando mysql-connector-python, abarcando tipos de datos de columnas, restricciones comunes, la cláusula IF NOT EXISTS, cómo listar las tablas existentes y cómo gestionar errores de forma limpia.
Requisitos previos
Antes de ejecutar cualquiera de los ejemplos siguientes, asegúrate de tener:
- Python 3.x instalado
- Un servidor MySQL en ejecución
mysql-connector-pythoninstalado:
pip install mysql-connector-python- Una base de datos con la que trabajar (consulta MySQL Crear base de datos si necesitas crear una)
Conectarse a MySQL
Toda operación comienza con una conexión. Pasa tus credenciales y el nombre de la base de datos de destino a mysql.connector.connect():
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()El objeto cursor() es el que usas para enviar sentencias SQL al servidor.
Crear una tabla
Usa la sentencia SQL CREATE TABLE dentro de cursor.execute() para definir una nueva tabla. El ejemplo siguiente crea una tabla customers con cuatro columnas:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
mycursor.close()
mydb.close()Tipos y restricciones de columnas utilizados anteriormente
| Columna | Tipo | Notas |
|---|---|---|
id | INT | AUTO_INCREMENT genera un ID único para cada fila; PRIMARY KEY garantiza la unicidad y acelera las búsquedas |
name | VARCHAR(255) | Cadena de longitud variable de hasta 255 caracteres; NOT NULL significa que cada fila debe proporcionar un valor |
address | VARCHAR(255) | Opcional — sin NOT NULL, por lo que acepta NULL |
age | INT | Almacena números enteros |
Usar IF NOT EXISTS
Ejecutar CREATE TABLE sobre una tabla que ya existe genera un error. Añade IF NOT EXISTS para que la sentencia no tenga efecto cuando la tabla ya existe:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Done — table created or already exists.")
mycursor.close()
mydb.close()Este patrón es seguro de invocar en cada inicio de la aplicación sin provocar errores de tabla duplicada.
Listar tablas para verificar la creación
Después de crear una tabla, puedes confirmar que existe ejecutando SHOW TABLES:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
tables = [row[0] for row in mycursor.fetchall()]
print("Tables in database:", tables)
if "customers" in tables:
print("customers table is ready.")
else:
print("customers table was not found.")
mycursor.close()
mydb.close()Ejemplo de salida:
Tables in database: ['customers']
customers table is ready.Gestionar errores
Envolver el código de creación de tablas en un bloque try/except permite capturar problemas — como una conexión perdida o un error de sintaxis en el SQL — sin que el programa falle:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()
print("Connection closed.")El bloque finally garantiza que la conexión siempre se cierre, incluso si ocurre una excepción.
Tipos de datos de columnas más comunes
MySQL admite muchos tipos de datos. Estos son los que usarás con más frecuencia en aplicaciones Python:
| Tipo de dato | Caso de uso |
|---|---|
INT | Números enteros (IDs, conteos, edades) |
FLOAT, DOUBLE | Números decimales (precios, medidas) |
VARCHAR(n) | Texto de longitud variable de hasta n caracteres |
TEXT | Cadenas largas sin máximo fijo |
DATE | Fechas de calendario (YYYY-MM-DD) |
DATETIME | Fecha y hora combinadas (YYYY-MM-DD HH:MM:SS) |
BOOLEAN | TRUE / FALSE (almacenado como TINYINT(1)) |
Un ejemplo más completo
A continuación se muestra una tabla más realista que utiliza varios tipos de datos y restricciones juntos:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
product VARCHAR(255) NOT NULL,
quantity INT NOT NULL DEFAULT 1,
price FLOAT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP
)
"""
mycursor.execute(sql)
print("orders table created (or already exists).")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()DEFAULT 1 significa que quantity se establece en 1 cuando no se proporciona ningún valor. DEFAULT CURRENT_TIMESTAMP registra automáticamente cuándo se inserta cada fila de pedido.
Conclusión
Para crear una tabla en MySQL desde Python:
- Instala
mysql-connector-pythony conéctate a tu base de datos. - Escribe una sentencia
CREATE TABLEque defina el nombre, el tipo de dato y las restricciones de cada columna. - Usa
IF NOT EXISTSpara evitar errores en ejecuciones repetidas. - Llama a
SHOW TABLES(o consultainformation_schema.tables) para confirmar que la tabla fue creada. - Cierra siempre el cursor y la conexión — idealmente en un bloque
finally.
Una vez que tu tabla exista, puedes empezar a insertar filas (consulta MySQL Insert) y a recuperarlas (consulta MySQL Select).