pymysql – Controlador de base de datos MySQL



Versión: 2.6+, 3.x.

Introducción

pymysql es un paquete para la interacción con bases de datos MySQL escrito completamente en Python, a diferencia de su principal “competidor”, MySQLdb. Se presenta como una atractiva alternativa a este último y con razón, pues las ventajas son bastante relevantes. Corre en distintas implementaciones de Python: CPython, PyPy y IronPython. Además, su instalación resulta más sencilla al prescindir de código escrito en C. Por último, y de las que más aprecio personalmente, soporte para el conjunto de versiones 3.x.

Descarga e instalación

Si cuentas con pip en tu ordenador, el proceso será de lo más sencillo. Ejecutar en la terminal:

pip install PyMySQL

Como alternativa, puedes descargar el código de fuente desde PyPI o bien desde el proyecto en GitHub. Una vez descomprimido el archivo, situarse en la carpeta recientemente creada y ejecutar:

python setup.py install

Ejemplos

Como la mayoría de los módulos para controlar un motor de base de datos, pymysql está basado en la DB-API; por lo tanto, usuarios con experiencia en otros paquetes (sqlite3, MySQLdb, por ejemplo) ya estarán familiarizados con la librería.

Establecer una conexión.

import pymysql

conn = pymysql.connect(
    host="localhost", port=3306, user="python",
    passwd="python1", db="recursospython"
)

Dirección del servidor (puerto e IP, host y port), datos de autenticación (usuario y contraseña, user y passwd) y nombre de la base de datos (db), que resulta equivalente a una futura ejecución de la consulta USE nombre_base_de_datos;. Para evitar problemas con caracteres especiales, siempre opto por indicar la codificación, añadiendo el parámetro charset.

charset="utf8"
 
Procedo a la creación de un cursor y ejecución de algunas consultas.

cursor = conn.cursor()
cursor.execute(
    "SELECT nombre, apellido FROM clientes"
)

for nombre, apellido in cursor.fetchall():
    print("{0} {1}".format(nombre, apellido))

La función fetchall retorna una lista con el conjunto de filas retornadas por la última consulta ejecutada. Por el contrario, fetchone() retorna el primer valor.

Por último, inserto datos en la tabla, guardo los cambios y cierro la conexión.

# Utilizo %s para integrar objetos en la consulta y prevenir inyecciones SQL.
cursor.execute(
    "INSERT INTO clientes VALUES (%s, %s)",
    ("Recursos", "Python")
)
# Guardar cambios.
conn.commit()
conn.close()

Es posible cerrar el cursor una vez que ha sido utilizado.

cursor.close()



1 comentario.

Deja un comentario