Primeros pasos con MySQL y Python

Para cualquier aplicación desplegable completamente funcional, la persistencia de los datos es indispensable. Una forma trivial de almacenar datos sería escribirlos en un archivo en el...

Introducción

Para cualquier aplicación desplegable completamente funcional, la persistencia de los datos es indispensable. Una forma trivial de almacenar datos sería escribirlos en un archivo en el disco duro, pero uno preferiría escribir los datos específicos de la aplicación en una base de datos por razones obvias. Python proporciona soporte de lenguaje para escribir datos en una amplia gama de bases de datos.

API de base de datos de Python

En el corazón del soporte de Python para la programación de bases de datos se encuentra Python DB API (PEP – 249) que no depende de ninguna base de datos específica. motor. Dependiendo de la base de datos que usemos en la capa de persistencia, se debe importar y usar en nuestro programa una implementación adecuada de Python DB API. En este tutorial, demostraremos cómo usar Python para conectarse a la base de datos MySQL y realizar transacciones con ella. Para esto, usaremos el paquete de Python MySQLdb.

Antes de continuar con la conexión a la base de datos usando Python, necesitamos instalar el conector MySQL para Python. Esto se puede hacer de dos formas:

1
$ pip install mysql-connector-python

Si hay una versión específica de MySQL instalada en la máquina local, es posible que necesite una versión específica del conector de MySQL para que no surjan problemas de compatibilidad, que podemos obtener con el siguiente comando:

1
$ pip install mysql-connector-python==<insert_version_number_here>

Finalmente, necesitamos instalar el módulo de cliente MySQL que nos permitirá conectarnos a las bases de datos MySQL desde nuestra aplicación Python, que actúa como cliente:

1
$ pip install mysqlclient

Conexión a la base de datos {#conexiónalabasede datos}

Una vez que tenemos el conector instalado en su lugar, la instrucción importar MySQLdb no debería arrojar ningún error al ejecutar el archivo de Python.

Requisitos previos

Nota: Se supone que los lectores tienen un conocimiento básico de las bases de datos en general y de la base de datos MySQL en particular, junto con conocimientos del lenguaje de consulta estructurado (SQL). Sin embargo, el proceso básico para crear una base de datos y un usuario se ha explicado en esta sección. Sigue estos pasos:

  • Asegúrese de que su servidor MySQL esté funcionando. Esto se puede verificar a través de MySQL WorkBench -> Estado del servidor.
  • Abra MySQL WorkBench o MySQL CLI. Cree una nueva base de datos. Llamémoslo pythondb.
1
2
CREATE DATABASE pythondb;
USE pythondb;
  • Cree un nuevo usuario pythonuser con la contraseña pythonpwd123 y otorgue acceso a pythonb
1
2
3
CREATE USER 'pythonuser'@'localhost' IDENTIFIED BY 'pythonpwd123'
GRANT ALL PRIVILEGES ON pythondb.* To 'pythonuser'@'localhost'
FLUSH PRIVILEGES

Comprobando su conexión a pythondb

Aquí hay una secuencia de comandos simple que se puede usar para probar mediante programación la conexión a la base de datos recién creada:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/python

import MySQLdb

dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")

cursor = dbconnect.cursor()
cursor.execute("SELECT VERSION()")

data = cursor.fetchone()
if data:
  print('Version retrieved: ', data)
else:
  print('Version not retrieved.')

dbconnect.close()

Producción

1
Version retrieved: 5.7.19

El número de versión que se muestra arriba es solo un número ficticio. Debe coincidir con la versión del servidor MySQL instalado.

Echemos un vistazo más de cerca al programa de muestra anterior para aprender cómo funciona. En primer lugar, importar MySQLdb se usa para importar el módulo de python requerido.

El método MySQLdb.connect() toma el nombre de host, el nombre de usuario, la contraseña y el nombre del esquema de la base de datos para crear una conexión de base de datos. Al conectarse con éxito con la base de datos, devolverá un objeto de conexión (que aquí se denomina dbconnect).

Usando el objeto de conexión, podemos ejecutar consultas, confirmar transacciones y revertir transacciones antes de cerrar la conexión.

Una vez que obtengamos el objeto de conexión, necesitamos obtener un objeto MySQLCursor para ejecutar consultas usando el método execute. El conjunto de resultados de la transacción se puede recuperar utilizando los métodos fetchall, fetchone o fetchmany, que se analizarán más adelante en este tutorial.

Hay tres métodos importantes relacionados con las transacciones de la base de datos además del método de ejecución. Ahora aprenderemos brevemente sobre estos métodos.

El método dbconnect.commit() informa a la base de datos que los cambios ejecutados antes de llamar a esta función se finalizarán y no hay margen para volver al estado anterior si la transacción es exitosa.

A veces, si ocurre una falla en la transacción, necesitaremos cambiar la base de datos al estado anterior antes de que ocurriera la falla para que los datos no se pierdan ni se corrompan. En tal caso, necesitaremos revertir la base de datos al estado anterior usando dbconnect.rollback().

Finalmente, el método dbconnect.close() se utiliza para cerrar la conexión a la base de datos. Para realizar más transacciones, necesitamos crear una nueva conexión.

Crear una nueva tabla

Una vez que la conexión con pythondb se establece con éxito, estamos listos para pasar al siguiente paso. Vamos a crear una nueva tabla en él:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import MySQLdb

dbconnect = MySQLdb.connect("localhost","pythonuser","pythonpwd123","pythondb" )

cursor = dbconnect.cursor()
cursor.execute("DROP TABLE IF EXISTS MOVIE")

query = "CREATE TABLE MOVIE(  \
          id int(11) NOT NULL,\
          name varchar(20),\
          year int(11),\
          director varchar(20),\
          genre varchar(20),\
          PRIMARY KEY (id))"

cursor.execute(query)

dbconnect.close()

Después de ejecutar el script anterior, debería poder ver una nueva tabla movie creada para el esquema pythondb. Esto se puede ver usando MySQL WorkBench.

Realización de operaciones CRUD

Ahora realizaremos algunas operaciones de inserción, lectura, modificación y eliminación en la tabla de la base de datos recién creada a través del script de Python.

Creación de un nuevo registro

La siguiente secuencia de comandos demuestra cómo insertar un nuevo registro en la base de datos MySQL mediante una secuencia de comandos de Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/usr/bin/python

import MySQLdb

dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")

cursor = dbconnect.cursor()

query = 'insert into movie(id, name, year, director, genre)  \
       values (1, "Bruce Almighty", 2003, "Tom Shaydac", "Comedy")'
try:
   cursor.execute(query)
   dbconnect.commit()
except:
   dbconnect.rollback()
finally:
   dbconnect.close()

Lectura de filas de una tabla

Una vez que se inserta una nueva fila en la base de datos, puede obtener los datos de tres formas utilizando el objeto de cursor:

  • cursor.fetchall() – se puede usar para obtener todas las filas
  • cursor.fetchmany() – se puede usar para obtener un número seleccionado de filas
  • cursor.fetchone() – se puede usar para obtener solo la primera fila del conjunto de resultados

Para simplificar, usaremos la consulta SQL "seleccionar todo" y usaremos un ciclo for sobre el conjunto de resultados del método fetchall para imprimir registros individuales.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python

import MySQLdb

dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")

cursor = dbconnect.cursor()

query = "SELECT * FROM movie"
try:
   cursor.execute(query)
   resultList = cursor.fetchall()
   for row in resultList:
      print ("Movie ID =", row[0])
      print ("Name =", row[1])
      print ("Year =", row[2])
      print ("Director = ", row[3])
      print ('Genre = ', row[4])
except:
   print ("Encountered error while retrieving data from database")
finally:
   dbconnect.close()

Producción:

1
2
3
4
5
Movie ID = 1
Name = Bruce Almighty
Year = 2003
Director = Tom Shaydac
Genre = Comedy

Actualización de una fila

Actualicemos ahora el Género de "Bruce Almighty" de Comedia a Sátira:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import MySQLdb

dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")

# The cursor object obtained below allows SQL queries to be executed in the database session.
cursor = dbconnect.cursor()

updatequery = "update movie set genre = 'Satire' where id = 1"

cursor.execute(updatequery)

dbconnect.commit()

print(cursor.rowcount, "record(s) affected")

Producción:

1
1 record(s) affected

Eliminación de un registro

Aquí hay una secuencia de comandos de Python que demuestra cómo eliminar una fila de la base de datos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import MySQLdb

dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")

# The cursor object obtained below allows SQL queries to be executed in the database session.
cursor = dbconnect.cursor()

updatequery = "DELETE FROM movie WHERE id = 1"

cursor.execute(updatequery)

dbconnect.commit()

print(cursor.rowcount, "record(s) deleted")

Después de ejecutar el script anterior, debería poder ver el siguiente resultado si todo va bien.

Producción

1
1 record(s) deleted

Conclusión

En este artículo, aprendimos a usar la API de base de datos de Python para conectarse a una base de datos. Específicamente, vimos cómo se puede establecer una conexión a una base de datos MySQL utilizando la implementación MySQLdb de Python DB API. También aprendimos cómo realizar transacciones con la base de datos.