W3docs

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-python instalado:
pip install mysql-connector-python

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

ColumnaTipoNotas
idINTAUTO_INCREMENT genera un ID único para cada fila; PRIMARY KEY garantiza la unicidad y acelera las búsquedas
nameVARCHAR(255)Cadena de longitud variable de hasta 255 caracteres; NOT NULL significa que cada fila debe proporcionar un valor
addressVARCHAR(255)Opcional — sin NOT NULL, por lo que acepta NULL
ageINTAlmacena 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 datoCaso de uso
INTNúmeros enteros (IDs, conteos, edades)
FLOAT, DOUBLENúmeros decimales (precios, medidas)
VARCHAR(n)Texto de longitud variable de hasta n caracteres
TEXTCadenas largas sin máximo fijo
DATEFechas de calendario (YYYY-MM-DD)
DATETIMEFecha y hora combinadas (YYYY-MM-DD HH:MM:SS)
BOOLEANTRUE / 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:

  1. Instala mysql-connector-python y conéctate a tu base de datos.
  2. Escribe una sentencia CREATE TABLE que defina el nombre, el tipo de dato y las restricciones de cada columna.
  3. Usa IF NOT EXISTS para evitar errores en ejecuciones repetidas.
  4. Llama a SHOW TABLES (o consulta information_schema.tables) para confirmar que la tabla fue creada.
  5. 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).

Was this page helpful?