Crear tablas en bases de datos con MariaDB - Tkinter desde cero - Capítulo 18


En este capítulo veremos cómo crear una tabla en una base de datos.
Ya tengo la base de datos creada del capítulo anterior y tenemos ya la conexión, pues lo siguiente, es saber como crear tablas en la base de datos. Te dejo el código para qué continúes desde este punto.

Código

from tkinter import *
import mariadb

# Ventana principal

root = Tk()
root.title("Ventana principal")
root.geometry("200x50")
root.resizable(0,0)

# Conexión con la base de datos

try:
    conexion = mariadb.connect(
        user="root",
        password="",
        host="127.0.0.1",
        port=3306,
        database="prueba"
    )

except mariadb.Error as error:
   print(f"Error al conectar con la base de datos: {error}")
   sys.exit(1)


# Interfaz gráfica

boton = Button(root, text="Crear tabla", width=20)

boton.place(x=25, y=10)

mainloop()

Crear tablas desde phpMyAdmin

Esto lo podemos hacer de muchas formas, yo te voy a enseñar a hacerlo desde phpMyAdmin y a continuación, desde Python.
Para crear una tabla escribe el siguiente código:

Código SQL

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

Resultado

Si todo salió bien, deberías tener una tabla nueva en la barra lateral de phpMyAdmin y al abrirla, deberías podeer ver los campos (id, nombre, apellidos...)

Crear tabla SQL

Analicemos este código SQL.
En primer lugar, se especifica la creación de una tabla con las palabras reservadas CREATE TABLE, entre los paréntesis, especificamos los nombres de los campos que tendrá la tabla, el tipo y la longitud, entre otras cosas.

Lo que aparece en color gris/negro en el código, son los nombres que le damos alos campos, seguido de estos, una serie de atributos para que sean de un tipo de dato u otro.

INT es un tipo de dato numérico de SQL, tenemos otros tipos de datos numéricos, pero de momento no tengo pensado explicarlos en este curso si no los utilizamos.

NOT NULL se utiliza para que no pueda haber una fila con un campo vacío, es decir, por ejemplo, si se lo pongo al campo id no podrá estar el id de ningún cliente vacío.

AUTO_INCREMENT va a hacer que sin especificar nada al registrar un cliente en la tabla, nos asigne el número de id 1, con el segundo le asignará el 2, por lo tanto, va a ir incrementando el número de id para que no nos tengamos que preocupar por esto.

Especificamos una serie de campos más para los clientes, como pueden ser el nombre, que va a tener un tipo de dato para caracteres denominado VARCHAR. Para que lo entiendas, aquí se va a almacenar un string, definimos una longitud máxima en bytes. Puesto que cada byte almacenará un caracter, para el nombre dejaremos reservada una longitud de 32 bytes que es suficiente.

Le especifico también al campo nombre, la opción NOT_NULL, porque no quiero que haya la posibilidad de almacenar clientes sin nombre en la base de datos.

Para los apellidos que sea un VARCHAR un poco más largo.

El teléfono puede ir en un VARCHAR de 9 caracteres, no importa que sea de tipo numérico, ya que no tengo pensado hacer ninguna operación matemática con el número de teléfono.

La dirección será normalmente algo más larga, así que démosle más longitud para evitar que queden direcciones a medio escribir.

Para finalizar, tenemos que tener una clave primaria para decidir qué campo de la tabla no va a poder tener duplicados. Es decir, por ejemplo, no podrá haber ni por error nuestro un id repetido en dos clientes, pero en cambio, si tenemos un cliente llamado Pedro, puede haber otros Pedros, no tiene porque haber solo 1.

Si le damos a continuar o hacemos intro, se va a crear la tabla y se va a crear en la base de datos prueba, porque es en la que estamos conectados ahora mismo, en caso de que aún no lo hayas hecho.

Crear tablas SQL desde Python

Puesto que estamos en un curso de Python y Tkinter, tienes que saber crear las tablas desde Python, no solo desde phpMyAdmin. Puedes copiar y pegar esta instrucción, ten cuidado no la pierdas cerrando el navegador o cambiando de página, ya que tendrías que volver a escribirla toda.

Lo primero que hay que escribir para manejar bases de datos desde Python, es el cursor, es como por así decirlo, el prompt de una consola de comandos, en él, podremos utilizar instrucciones SQL. Ponlo en el bloque try de la conexión.

Código

cursor = conexion.cursor()

Y ahora, crea una función que sea capaz de ejecutar la instrucción SQL que acabo de escribir en phpMyAdmin.

Código

def crea_bd():
   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));")
       conexion.commit()
   except mariadb.Error as error_tabla:
       print(f"Error al crear la tabla: {error_tabla}")

Lo puedes hacer como siempre con un bloque try/except por si ocurre un error con la creación de la tabla.
Llamamos al cursor con cursor.execute() y entre sus paréntesis ponemos lo que queremos que se ejecute en el cursor, en este caso, la instrucción para crear la tabla.
Es importante el conexion.commit() para que se hagan efectivos los cambios en la base de datos. Sería el equivalente a guardar en cualquier programa.

Finalmente, al botón de crear tabla que te he dejado en el código de arriba, añade el atributo command para crear la tabla.

Y eso es todo. En el siguiente capítulo veremos como insertar desde una ventana de Tkinter los datos de los clientes hacia la base de datos.


Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.