Introducci贸n
Contenido
Para cualquier aplicaci贸n implementable 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 Python DB
En el coraz贸n del soporte de Python para la programaci贸n de bases de datos se encuentra la API Python DB (PEP – 249) que no depende de ning煤n motor de base de datos espec铆fico. Dependiendo de la base de datos que usemos en la capa de persistencia, se debe importar y usar en nuestro programa una implementaci贸n apropiada 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 MySQLdb Paquete de Python.
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:
- Una forma es descargar el instalador apropiado para el sistema operativo y la versi贸n de bits directamente desde el Sitio oficial de MySQL.
- Otra forma es usar pip para instalarlo.
$ pip install mysql-connector-python
Si hay una versi贸n espec铆fica de MySQL instalada en la m谩quina local, entonces es posible que necesite una versi贸n espec铆fica del conector MySQL para que no surjan problemas de compatibilidad, que podemos obtener usando el siguiente comando:
$ pip install mysql-connector-python==<insert_version_number_here>
Finalmente, necesitamos instalar el m贸dulo de cliente MySQL que nos permitir谩 conectarnos a bases de datos MySQL desde nuestra aplicaci贸n Python, que act煤a como cliente:
$ pip install mysqlclient
Conectarse a la base de datos
Una vez que tenemos el conector instalado en su lugar, el import MySQLdb
La declaraci贸n no deber铆a arrojar ning煤n error al ejecutar el archivo Python.
Prerrequisitos
Nota: Se asume que los lectores tienen un conocimiento b谩sico de las bases de datos en general y de la base de datos MySQL en espec铆fico, junto con el conocimiento del lenguaje estructurado de consultas (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 se est茅 ejecutando. Esto se puede verificar a trav茅s de MySQL WorkBench -> Estado del servidor.
- Abra MySQL WorkBench o MySQL CLI. Crea una nueva base de datos. Vamos a llamarlo
pythondb
.
CREATE DATABASE pythondb;
USE pythondb;
- Crea un nuevo usuario
pythonuser
con contrase帽apythonpwd123
y otorgar acceso apythondb
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 un script simple que se puede usar para probar mediante programaci贸n la conexi贸n a la base de datos reci茅n creada:
#!/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()
Salida
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. Antes que nada, import MySQLdb
se usa para importar el m贸dulo de Python requerido.
MySQLdb.connect()
El m茅todo 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 a la base de datos. Al conectarse correctamente con la base de datos, devolver谩 un objeto de conexi贸n (que se conoce como dbconnect
Aqu铆).
Usando el objeto de conexi贸n, podemos ejecutar consultas, confirmar transacciones y revertir transacciones antes de cerrar la conexi贸n.
Una vez que obtenemos el objeto de conexi贸n, necesitamos obtener un MySQLCursor
objeto para ejecutar consultas utilizando execute
m茅todo. El conjunto de resultados de la transacci贸n se puede recuperar utilizando el fetchall
, fetchone
o fetchmany
m茅todos, que se discutir谩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.
los dbconnect.commit()
El m茅todo 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, tendremos que 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 dbconnect.close()
El m茅todo 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. Creemos una nueva tabla en ella:
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
creado 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 base de datos reci茅n creada a trav茅s del script de Python.
Crear un nuevo registro
El siguiente script demuestra c贸mo insertar un nuevo registro en la base de datos MySQL usando un script de Python:
#!/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()
Leer filas de una tabla
Una vez que se inserta una nueva fila en la base de datos, puede obtener los datos de tres formas usando el objeto cursor:
cursor.fetchall()
– se puede usar para obtener todas las filascursor.fetchmany()
– se puede usar para obtener un n煤mero seleccionado de filascursor.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 bucle for sobre el conjunto de resultados del fetchall
m茅todo para imprimir registros individuales.
#!/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()
Salida:
Movie ID = 1
Name = Bruce Almighty
Year = 2003
Director = Tom Shaydac
Genre = Comedy
Actualizar una fila
Actualicemos ahora el g茅nero de “Bruce Almighty” de comedia a s谩tira:
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")
Salida:
1 record(s) affected
Eliminar un registro
Aqu铆 hay una secuencia de comandos de Python que demuestra c贸mo eliminar una fila de la base de datos:
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.
Salida
1 record(s) deleted
Conclusi贸n
En este art铆culo, aprendimos c贸mo usar la API de Python DB para conectarse a una base de datos. Espec铆ficamente, vimos c贸mo se puede establecer una conexi贸n a una base de datos MySQL usando la implementaci贸n MySQLdb de la API Python DB. Tambi茅n aprendimos c贸mo realizar transacciones con la base de datos.