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.
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.
No hay comentarios:
Publicar un comentario