Crear tablas con MariaDB con Python y Tkinter
Capítulo 18: Crear tablas en bases de datos con MariaDB
En este capítulo veremos cómo crear una tabla en una base de datos con MariaDB Python y Tkinter.
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.
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:
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)
)
Si todo salió bien, deberías tener una tabla nueva en la barra lateral de phpMyAdmin y al abrirla, deberías poder ver los campos (id, nombre, apellidos...)
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 a los 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 carácter, 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 pulsamos la tecla ENTER, 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.
cursor = conexion.cursor()
Y ahora, crea una función que sea capaz de ejecutar la instrucción SQL que acabo de escribir en phpMyAdmin.
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.
Comentarios
Si te quedan dudas sobre el temario, sobre Tkinter, 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.