Mostramos un ejemplo de código fuente en lenguaje de programación Python que accede a servidor de base de datos MySQL y MariaDB y realiza diversas acciones: select, insert, updater y delete.
- Requisitos para acceso a MySQL con Python.
- Ejemplo de ejecución de consulta SQL select en Python contra servidor MySQL.
- Select con filtro (parámetro) en tabla MySQL con Python.
- Inserción de registro en tabla MySQL con Python.
- Modificar registro existente en tabla MySQL desde Python.
- Eliminar registros en tabla MySQL desde Python.
- Descarga del código fuente de los ejemplos Python.
- Anexo
Requisitos para acceso a MySQL con Python
Necesitaremos disponer de Python instalado en el equipo y un IDE de desarrollo (puede usarse un editor de texto plano, pero un IDE nos ayudará a programar sin errores y a compilar los programas). En el siguiente artículo explicamos cómo instalar Python y el IDE Visual Studio Code:
En el caso de SQLite, Python ya incluye su propio paquete para trabajar con esta base de datos, como hemos explicado en el siguiente artículo:
En cambio, para MySQL, es preciso descargar o instalar el paquete Python para acceso a MySQL. Para instalarlo en Python automáticamente, si tenemos un equipo Windows, abriremos una ventana de MS-DOS (cmd, Símbolo de sistema):
Y escribiremos, en primer lugar, para verificar que la carpeta de instalación de Python está en la variable de entorno PATH:
pip –version
Si nos devuelve algo así:
pip 20.2.3 from c:\program files\lib\site-packages\pip (python 3.9)
Significará que podemos ejecutar el comando desde cualquier ubicación del equipo. En caso de que nos devuelva que el comando «pip» no existe, deberemos acceder a la carpeta donde se encuentra este comando con «cd», por ejemplo:
cd C:\Program Files\Scripts
Ejecutaremos a continuación el comando que descargará el paquete para trabajar con bases de datos MySQL desde nuestros programas Python, que será el siguiente:
pip install mysql-connector-python
Si todo es correcto nos devolverá algo así:
Defaulting to user installation because normal site-packages is not writeable
Collecting mysql-connector-python
Downloading mysql_connector_python-8.0.22-py2.py3-none-any.whl (374 kB)
Collecting protobuf>=3.0.0
Downloading protobuf-3.14.0-py2.py3-none-any.whl (173 kB)
Requirement already satisfied: six>=1.9 in c:\users\alonso\appdata\roaming\python\python39\site-packages (from protobuf>=3.0.0->mysql-connector-python) (1.15.0)
Installing collected packages: protobuf, mysql-connector-python
Successfully installed mysql-connector-python-8.0.22 protobuf-3.14.0
WARNING: You are using pip version 20.2.3; however, version 20.3.3 is available.
You should consider upgrading via the ‘c:\program files\python.exe -m pip install –upgrade pip’ command.

En nuestro caso nos indica que hay una versión de pip más reciente y que podemos actualizarla con el comando:
python.exe -m pip install –upgrade pip
No es necesario para el caso que nos ocupa, pero si queremos tener esta herramienta actualizada podemos ejecutar el comando anterior.
Ya tenemos disponible el paquete para trabajar con base de datos MySQL desde Python, para usarlo añadiremos el import:
import mysql.connector
A continuación mostramos un ejemplo completo que usa este paquete y realiza varias acciones contra un servidor MySQL Server.
Todo lo que explicaremos a continuación para MySQL es perfectamente válido para MariaDB.
Ejemplo de ejecución de consulta SQL select en Python contra servidor MySQL
A continuación mostramos un sencillo ejemplo que ejecuta una consulta SQL «sencilla», un select en un servidor de MySQL Server. Muestra el resultado de los registros obtenidos por pantalla. El código completo en Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import mysql.connector #Conexión con el servidor MySQL Server conexionMySQL = mysql.connector.connect( host='localhost', user='root', passwd='', db='lista_compra' ) #Consulta SQL que ejecutaremos, en este caso un select sqlSelect = """SELECT id, nombre, cantidad FROM articulos ORDER BY id DESC LIMIT 1000""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) #Guardamos el resultado de la consulta en una variable resultadoSQL = cursor.fetchall() #Cerramos el cursor y la conexión con MySQL cursor.close() conexionMySQL.close() #Mostramos el resultado por pantalla print (resultadoSQL) |
En el ejemplo anterior conectamos con un servidor MySQL ubicado en el mismo equipo que donde ejecutamos el programa, de ahí que host tenga el valor «localhost». Si el servidor es externo, no hay problema, cambiaremos «localhost» por su nombre o dirección y cambiaremos, como es lógico «user», «passwd» y «db» por el usuario, contraseña y nombre de la base de datos a la que queramos conectar.
En el ejemplo hemos obtenido los registros (limitando a 1000) de la tabla «articulos» que previamente existirá en nuestra base de datos «lista_compra» del servidor MySQL.
Si compilamos la aplicación y tanto el servidor MySQL como la base de datos y la tabla están correctos, mostrará por pantalla sus registros:

De esta sencilla forma, podremos acceder desde nuestros programas Python a un servidor MySQL y realizar cualquier acción que necesitemos: select, insert, delete, update, …, como veremos a continuación.
Select con filtro (parámetro) en tabla MySQL con Python
Python también permite pasar parámetros a una consulta SQL para realizar, por ejemplo, un filtro. Modificando el ejemplo anterior, seleccionaremos solo los registros cuyo campo «cantidad» de la tabla «articulos» sea mayor de un número que se solicite al usuario por consola:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import mysql.connector #Conexión con el servidor MySQL Server conexionMySQL = mysql.connector.connect( host='localhost', user='root', passwd='', db='lista_compra' ) #Pedimos al usuario una cantidad sol_cantidad = int(input("Introduzca una cantidad: ")) #Consulta SQL que ejecutaremos, en este caso un select #Con el parámetro sol_cantidad para filtrar aquellos #registros cuya cantidad sea superior a la introducida sqlSelect = f"""SELECT id, nombre, cantidad FROM articulos WHERE cantidad > {sol_cantidad}""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) #Guardamos el resultado de la consulta en una variable resultadoSQL = cursor.fetchall() #Cerramos el cursor y la conexión con MySQL cursor.close() conexionMySQL.close() #Mostramos el resultado por pantalla print (resultadoSQL) |
Inserción de registro en tabla MySQL con Python
A continuación mostramos un ejemplo de inserción de registros en una tabla MySQL usando Python como lenguaje de programación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import mysql.connector #Conexión con el servidor MySQL Server conexionMySQL = mysql.connector.connect( host='localhost', user='root', passwd='', db='lista_compra' ) #Pedimos al usuario el nombre y la cantidad del artículo que se insertará en la BD MySQL sol_nombre = input("Introduzca el nombre del artículo: ") sol_cantidad = int(input("Introduzca la cantidad de unidades en stock del artículo: ")) #Consulta SQL que ejecutaremos, en este caso un insert sqlInsertarRegistro = f"""INSERT INTO articulos (nombre, cantidad) VALUES ("{sol_nombre}", {sol_cantidad})""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL de inserción cursor.execute(sqlInsertarRegistro) conexionMySQL.commit() #Consulta de selección para mostrar los registros por pantalla #para comprobar que se ha insertado uno nuevo sqlSelect = """SELECT id, nombre, cantidad FROM articulos ORDER BY id DESC""" #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) #Guardamos el resultado de la consulta en una variable resultadoSQL = cursor.fetchall() #Cerramos el cursor y la conexión con MySQL cursor.close() conexionMySQL.close() #Mostramos el resultado por pantalla print (resultadoSQL) |
Modificar registro existente en tabla MySQL desde Python
A continuación mostramos un código fuente Python de ejemplo que solicita al usuario un código de artículo, un nombre y una cantidad de stock y actualiza el artículo existente en la tabla (filtrando por el código) con los nuevos datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import mysql.connector #Conexión con el servidor MySQL Server conexionMySQL = mysql.connector.connect( host='localhost', user='root', passwd='', db='lista_compra' ) #Función que comprueba si existe un registro en la BD MySQL def existeRegistro(conexionMySQL, codigoArticulo): sqlSelect = f"""SELECT id FROM articulos WHERE id = {codigoArticulo}""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) cursor.fetchall() if cursor.rowcount == 1: return True else: return False #Pedimos al usuario el ID, el nuevo nombre y #la nueva cantidad para modificar un registro existente en la BD MySQL sol_id = int(input("Introduzca el código (ID) del artículo a modificar: ")) #Comprobamos si existe el artículo con el código introducido #En caso de no existir salimos del programa con código de salida 1 if not existeRegistro(conexionMySQL, sol_id): print("No existe un artículo con el código ",sol_id) exit(1) #Si existe el artículo continuamos con el programa sol_nombre = input("Introduzca el nombre del artículo: ") sol_cantidad = int(input("Introduzca la cantidad de unidades en stock del artículo: ")) #Consulta SQL que ejecutaremos, en este caso un update #Filtraremos por el ID de artículo introducido por el usuario #Para actualizar un único registro sqlModificarRegistro = f"""UPDATE articulos set nombre="{sol_nombre}", cantidad={sol_cantidad} WHERE id={sol_id}""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL de modificación cursor.execute(sqlModificarRegistro) conexionMySQL.commit() #Consulta de selección para mostrar los registros por pantalla #para comprobar que se ha insertado uno nuevo sqlSelect = """SELECT id, nombre, cantidad FROM articulos ORDER BY id DESC""" #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) #Guardamos el resultado de la consulta en una variable resultadoSQL = cursor.fetchall() #Cerramos el cursor y la conexión con MySQL cursor.close() conexionMySQL.close() #Mostramos el resultado por pantalla print (resultadoSQL) |
Eliminar registros en tabla MySQL desde Python
A continuación mostramos un ejemplo de eliminación de registros en tabla MySQL usando Python como lenguaje de programación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import mysql.connector #Conexión con el servidor MySQL Server conexionMySQL = mysql.connector.connect( host='localhost', user='root', passwd='', db='lista_compra' ) #Función que comprueba si existe un registro en la BD MySQL def existeRegistro(conexionMySQL, codigoArticulo): sqlSelect = f"""SELECT id FROM articulos WHERE id = {codigoArticulo}""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) cursor.fetchall() if cursor.rowcount == 1: return True else: return False #Pedimos al usuario el ID del artículo a eliminar sol_id = int(input("Introduzca el código (ID) del artículo a eliminar: ")) #Comprobamos si existe el artículo con el código introducido #En caso de no existir salimos del programa con código de salida 1 if not existeRegistro(conexionMySQL, sol_id): print("No existe un artículo con el código ",sol_id) exit(1) #Consulta SQL que ejecutaremos, en este caso un delete #Filtraremos por el ID de artículo introducido por el usuario #Para eliminar un único registro sqlEliminarRegistro = f"""DELETE from articulos WHERE id={sol_id}""" #Establecemos un cursor para la conexión con el servidor MySQL cursor = conexionMySQL.cursor() #A partir del cursor, ejecutamos la consulta SQL de eliminación cursor.execute(sqlEliminarRegistro) conexionMySQL.commit() #Consulta de selección para mostrar los registros por pantalla #para comprobar que se ha eliminado correctamente sqlSelect = """SELECT id, nombre, cantidad FROM articulos ORDER BY id DESC""" #A partir del cursor, ejecutamos la consulta SQL cursor.execute(sqlSelect) #Guardamos el resultado de la consulta en una variable resultadoSQL = cursor.fetchall() #Cerramos el cursor y la conexión con MySQL cursor.close() conexionMySQL.close() #Mostramos el resultado por pantalla print (resultadoSQL) |
Descarga del código fuente de los ejemplos Python
A continuación os mostramos enlace para la descarga de todos los ejemplos usados en este artículo:
Anexo
Error ModuleNotFoundError: No module named ‘mysql.connector’; ‘mysql’ is not a package
Si nombramos el fichero .py de nuestro código como mysql.py, hemos observado que el compilador muestra este error:
import mysql.connector
ModuleNotFoundError: No module named ‘mysql.connector’; ‘mysql’ is not a package
Para evitar este error, sencillamente, cambiaremos el nombre del fichero mysql.py por otro cualquiera, por ejemplo acceso_mysql.py.