Bases de datos MySQL con Python

Bases de datos MySQL con Python

Bases de datos MySQL con Python - 100 días de Python #20

Ahora que ya dejamos todo preparado para trabajar con bases de datos MySQL con Python en el capítulo anterior, es el momento de empezar a hacer unas cuantas cosas más. Para ello, tendré que darte una pequeña clase de SQL con las necesidades más básicas. Esto es lo que veremos en este y los próximos capítulos:

  • Algunas cosas sobre el lenguaje SQL.
  • Crear bases de datos MySQL desde Python.
  • Eliminar bases de datos MySQL.
  • Crear tablas MySQL desde Python.
  • Eliminar tablas MySQL.
  • Crear registros en tablas.
  • Eliminar registros.
  • Leer registros.

Seguimos con el código del capítulo anterior:

#importaciones
import mysql.connector

#conexion con el servidor
conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
)

#creación del cursor
cursor = conexion.cursor()

Crear bases de datos MySQL desde Python

Para crear una base de datos MySQL nueva desde Python, solo tienes que utilizar el cursor con la siguiente instrucción SQL:

CREATE DATABASE pruebas;

En Python, quedará así:

#importaciones
import mysql.connector

#conexion con el servidor
conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
)

#creación del cursor
cursor = conexion.cursor()

#creación de nueva base de datos
cursor.execute("CREATE DATABASE pruebas;")

Esto creará una base de datos en el servidor, llamada "pruebas".

Tras ejecutarlo, en la consola de Python, no debería haber ningún error.

Ves a MySQL Workbench y mira en la sección del navegador "Navigator", en la pestaña "Schemas", que tengas la nueva base de datos creada.

Si ya tenías Workbench abierto, actualiza la sección del "Schemas" con este botón:

bases de datos mysql workbench

Ahora, aparecerá la nueva base de datos.

bases de datos mysql

Datos sobre SQL

El lenguaje SQL, en el que se basa MySQL, no es case-sensitive, de modo, que las palabras reservadas como CREATE se pueden poner en mayúsculas o minúsculas. Normalmente, se ponen las palabras clave en mayúscula y las propias como el nombre de la base de datos "pruebas" en minúsculas. Así distinguimos muy fácilmente las cosas.

El punto y coma, al final de las instrucciones SQL, no es necesario. Se utiliza cuando escribimos varias instrucciones y así separarlas. Sin embargo, es buena práctica acostumbrarse a ponerlo para evitar errores con esto cuando trabajemos con código SQL más complejo.

Mensajes de error y acierto para MySQL en Python

Como has visto, la base de datos se ha creado, pero Python no nos ha avisado de nada. Ahora, intenta ejecutar el mismo código. Intenta crear de nuevo la misma base de datos con el mismo nombre.

Error en la consola

mysql.connector.errors.DatabaseError: 1007 (HY000): Can't create database 'pruebas'; database exists

Nos dice que no se puede crear la base de datos 'nombre_base_datos' porque ya existe.

¿No sería más agradable poder manejar estos errores y ofrecer un mensaje personalizado?

Pues bien, utilicemos los bloques "try-except" para mostrar en la consola un mensaje de éxito o de error cuando corresponda.

En el caso de que no ocurra ningún error, se ejecutará el bloque try, creará la base de datos y me mostrará el mensaje de que se creó sin problemas.

En cambio, si ocurre un error, como el de que la base de datos ya existe, se ejecutará el bloque except con ese print, en lugar de mostrar ese error de MySQL.

try:
    cursor.execute("CREATE DATABASE pruebas;")
    print("Se creó correctamente la base de datos.")
except:
    print("Ocurrió un error al crear la base de datos. Inténtelo de nuevo.")

Ahora, prueba de crear el mismo error, a ver si te funciona.

Resultado en la consola

Ocurrió un error al crear la base de datos. Inténtelo de nuevo.

Finalmente, probemos el bloque try. Pon otro nombre para crear una nueva base de datos, por ejemplo, "pruebas2".

try:
    cursor.execute("CREATE DATABASE pruebas2;")
    print("Se creó correctamente la base de datos.")
except:
    print("Ocurrió un error al crear la base de datos. Inténtelo de nuevo.")

Resultado en la consola

Se creó correctamente la base de datos.

Tipos de datos SQL

En SQL, al igual que en cualquier lenguaje de programación, tenemos tipos de datos. En el caso de este, la cantidad que existe es enorme, de forma que no los veremos todos, ya que esto no es un curso de SQL. Te voy a dar unos cuantos de los más utilizados para que puedas ir siguiendo mis ejemplos.

Los tipos de datos, van asociados a los campos de las tablas, por lo tanto, puedes ver los campos como variables en el lenguaje SQL si te ayuda a entenderlo mejor.

El tipo de dato SQL VARCHAR

El tipo de dato SQL VARCHAR, podemos decir que es un string, puesto que sirve para almacenar strings de hasta más de 65.000 caracteres de longitud.

Este es el que vamos a usar en los ejemplos para almacenar cosas como nombres, apellidos, direcciones, etc.

El tipo de dato SQL INT

El tipo de dato SQL INT, sirve para almacenar valores enteros en un rango muy grande, más de 4000 millones de posibilidades.

Este es el que usaremos para guardar algunos valores numéricos enteros.

El tipo de dato SQL FLOAT

El tipo de datos SQL FLOAT, lo emplearemos para almacenar valores numéricos decimales.

Por el momento, esto es todo lo que necesitas saber para continuar con los siguientes ejemplos. Si necesitamos algún tipo de dato más, ya lo explicaré.

Eliminar bases de datos MySQL desde Python

Pasemos al siguiente apartado, eliminar bases de datos MySQL desde Python.

Para realizar esto, deberás especificar la siguiente instrucción SQL en el cursor.

Yo voy a eliminar la base de datos "pruebas2".

DROP DATABASE pruebas2;

En Python, el código final se verá así:

#importaciones
import mysql.connector

#conexion con el servidor
conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
)

#creación del cursor
cursor = conexion.cursor()

#eliminación de base de datos
try:
    cursor.execute("DROP DATABASE pruebas2;")
    print("Se eliminó correctamente la base de datos.")
except:
    print("Ocurrió un error al intentar eliminar la base de datos. Inténtelo de nuevo.")

Fíjate que he cambiado los mensajes de los bloques "try-except" para que informen de manera adecuada.

Para ver los cambios en la sección "Navigator" de MySQL Workbench, cuando crees o elimines bases de datos, acuérdate siempre que le tienes que dar al botón de actualizar, si no, no verás los cambios hasta que no vuelva a abrir el programa.

schemas mysql workbench

Crear una tabla en una base de datos MySQL desde Python

Vayamos al siguiente paso. Crear una tabla en una base de datos MySQL desde Python.

Para almacenar datos en una base de datos, tenemos que crear tablas. Utilizaremos la base de datos de prueba que acabamos de crear u otra que no sea una de las que vienen al instalar MySQL (las utilizaremos en otro momento), vamos a crear una tabla llamada "clientes". En ella, almacenaremos los datos personales de clientes en una empresa ficticia.

Para crear una tabla, deberás especificar los campos que va a llevar y sus tipos de datos, además, de la longitud máxima de cada uno.

La tabla tendrá los siguientes campos:

  • ID (INT)
  • Nombre (VARCHAR)
  • Apellidos (VARCHAR)
  • Teléfono (VARCHAR)
  • Dirección (VARCHAR)

Todos los campos serán de tipo VARCHAR excepto el ID, que será un identificador único en la tabla. Este número de ID, es importante, ya que si tenemos dos clientas que se llamen Andrea Mendoza Solano (es difícil, pero puede ocurrir), ¿cómo sabremos cuál es cuál? Hay que tener una forma inequívoca para cada registro.

Para este ejemplo, vas a crear la base de datos desde MySQL Workbench. Así aprendes otra forma de hacerlo.

Crear base de datos desde mysql Workbench

En la siguiente parte, ponle el nombre a la base de datos. La convención de escritura para el nombre de base de datos SQL es snake_case (todo minúsculas y si hay más de una palabra, separadas con guion bajo). Una vez tengas el nombre, le das al botón "Apply".

bases de datos mysql

Finaliza con el botón "Finish".

bases de datos mysql

Ahora, debería aparecer la nueva base de datos.

bases de datos mysql con python

En el cursor.execute() pon el siguiente código SQL para crear la tabla:

CREATE TABLE clientes (id INT NOT NULL AUTO_INCREMENT, nombre VARCHAR (32) NOT NULL, apellidos VARCHAR (64) NOT NULL, telefono VARCHAR (9) NOT NULL, direccion VARCHAR (256), PRIMARY KEY (id));

Primero se especifica con las palabras "CREATE TABLE" que se cree una nueva tabla "clientes" en mi caso.

Entre los paréntesis que envuelven el resto de código, hay que especificar todos los campos que van a formar la tabla. Estos se ordenarán en el mismo orden en que los especifiques.

  • id INT NOT NULL AUTO_INCREMENT: el campo se llama "id", es de tipo "INT", no puede contener valores vacíos ("NOT NULL") y es autoincrementable ("AUTO_INCREMENT"). Esto quiere decir que se le va a dar un valor numérico entero a cada registro nuevo de forma automática, empezando por el 1. De esta forma, nos despreocupamos de saber por qué número de cliente vamos en el momento de crear nuevos registros de cliente.
  • nombre VARCHAR (32) NOT NULL: campo con nombre "nombre" de tipo "VARCHAR" (string o texto), con una longitud máxima de 32 caracteres y "NOT NULL" que ya lo he explicado.
  • apellidos VARCHAR (64) NOT NULL: es un "VARCHAR" de mayor longitud, ya que los apellidos normalmente necesitan más caracteres que los nombres.
  • telefono VARCHAR (9) NOT NULL: el teléfono (evita acentos en los nombres de campo), aunque son números, no lo son de manera operable, no lo necesitamos para este propósito, por lo tanto, puede quedar como string en un "VARCHAR". La longitud 9 puede variar dependiendo del país o si se va a guardar un prefijo. Si necesitas más de 9, pon más.
  • direccion VARCHAR (256): La dirección necesita un amplio número de caracteres, ya que algunas pueden ser bastante largas. Para evitar quedarse cortos en este campo, pon algo más grande como 256 caracteres. En este caso, no he puesto "NOT NULL", puesto que, en ocasiones, cabe la posibilidad de no tener una dirección del cliente. En ese caso, dejaremos el campo con la posibilidad de almacenar valores nulos.
  • PRIMARY KEY (id): Con "PRIMARY KEY" y el nombre de un campo en concreto como "ide", creamos la clave primaria de la tabla.

¿Qué son los valores nulos y vacíos en programación?

No confundas los valores vacíos con los nulos. En programación, un valor nulo, es aquel que no ha sido asignado, es decir, como una variable sin inicializar.

En cambio, un valor vacío, es un dato vacío que si ha sido asignado, en Python, un valor vacío, puede ser un string así: "". Sin ningún espacio.

¿Qué es la clave primaria de una tabla SQL?

La clave primaria es un campo único en la tabla al cual le indicamos, que no queremos duplicados en él. De esa forma, evitaremos posibles errores poniendo IDs duplicados a varios clientes.

Puesto que no doy por sentado que sepas trabajar con SQL ni bases de datos, te dejo el código que necesitas para crear esta tabla, así lo entenderás más fácil.

En el objeto "conexion", he añadido un argumento nuevo, "database". Este argumento sirve para indicar sobre que base de datos va a trabajar el cursor. Pues bien, si quiere crear una tabla en la base de datos que he creado, le pongo ahí su nombre, y ya podré ejecutar la instrucción necesaria para crear la tabla.

En el "try", tengo todo el código SQL que te he explicado aquí arriba. Al ejecutar ese código, se hará efectiva la creación.

En caso de que haya un error de sintaxis o que la tabla ya esté creada, saltará el print() del "except".

#importaciones
import mysql.connector

#conexion con la base de datos
conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
    database = "american_rider"
)

#creación del cursor
cursor = conexion.cursor()

#creación de una tabla
try:
    cursor.execute("CREATE TABLE clientes" 
    "(id INT NOT NULL AUTO_INCREMENT,"
    "nombre VARCHAR (32) NOT NULL,"
    "apellidos VARCHAR (64) NOT NULL," 
    "telefono VARCHAR (9) NOT NULL,"
    "direccion VARCHAR (256), "
    "PRIMARY KEY (id));")
    print("Se creó correctamente la tabla.")
except:
    print("Ocurrió un error al intentar crear la tabla. Inténtelo de nuevo.")

Si vas a MySQL Workbench podrás comprobar si se ha creado la nueva tabla. Primero, haz click en este botón para crear una hoja de consultas:

Consultas sql

Te aparecerá la zona del editor de código en blanco. Escribe el siguiente comando, el cuál, sirve para mostrar todos los registros de una tabla en concreto.

Sencillamente, le digo: selecciona (SELECT) todos los registros (*) de (FROM) la tabla "clientes" que está en la base de datos "american_rider".

SELECT * FROM american_rider.clientes;

Con el icono del rayo, puedes ejecutar la instrucción SQL como lo hacías desde Python. Abajo, te saldrán todos los campos de la tabla, pero todavía no tenemos ni un registro. Está la tabla, pero vacía.

A la izquierda, ahora que entiendes un poco más, aparece un pequeño resumen de los campos con su tipo de dato y longitud entre paréntesis. La clave primaria se distingue porque está en negrita y subrayada, además de poner "PK". El "AI" significa lo de "AUTO_INCREMENTABLE".

campos de tabla sql

Voy a dejar el capítulo aquí. No quiero alargarlo en exceso y que os aburráis. Continuamos con MySQL y Python en el próximo capítulo. En este, tampoco habrá ejercicios, los dejo seguramente para el próximo, ya que, realmente, casi todo está siendo práctica en estos capítulos.

No te pierdas nada sobre Python. Tengo mucho contenido en este enlace.

2 comentarios en «0»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Utilizar bases de datos MySQL con Python
curso Java Entrada siguiente Operaciones aritméticas básicas con Java