Python3 MySQL Conexión de base de datos - Controlador PyMySQL
En este artículo les presentamos el uso de Python3PyMySQLpara conectarse a la base de datos e implementar operaciones simples de inserción, eliminación, modificación y consulta.
¿Qué es PyMySQL?
PyMySQL es una biblioteca utilizada en las versiones de Python 3.x para conectarse al servidor MySQL; en Python 2 se usa mysqldb.
PyMySQL sigue la especificación de la API de base de datos de Python v2.0 e incluye una biblioteca cliente MySQL en Python puro.
Instalación de PyMySQL
Antes de usar PyMySQL, debemos asegurarnos de que PyMySQL esté instalado.
Dirección de descarga de PyMySQL:https://github.com/PyMySQL/PyMySQL。
Si aún no está instalado, podemos usar el siguiente comando para instalar la última versión de PyMySQL:
$ pip3 install PyMySQL
Si su sistema no es compatible con el comando pip, puede instalarlo de las siguientes maneras:
1. Use el comando git para descargar e instalar el paquete de instalación (también puede descargarlo manualmente):
$ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install
2. Si necesita especificar un número de versión, puede usar el comando curl para instalarlo:
$ # X.X 为 PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py install $ # 现在你可以删除 PyMySQL* 目录
Nota:Asegúrese de tener privilegios de root para instalar los módulos mencionados anteriormente.
Durante la instalación puede aparecer el mensaje de error "ImportError: No module named setuptools", lo que significa que no tiene instalado setuptools. Puede visitarhttps://pypi.python.org/pypi/setuptoolspara encontrar los métodos de instalación para cada sistema.
Ejemplo de instalación en sistema Linux:
$ wget https://bootstrap.pypa.io/ez_setup.py $ python3 ez_setup.py
Conexión a la base de datos
Antes de conectarse a la base de datos, confirme lo siguiente:
- Ya ha creado la base de datos TESTDB.
- En la base de datos TESTDB ha creado la tabla EMPLOYEE.
- Los campos de la tabla EMPLOYEE son FIRST_NAME, LAST_NAME, AGE, SEX e INCOME.
- El nombre de usuario para conectarse a la base de datos TESTDB es "testuser" y la contraseña es "test123". Puede configurarlos usted mismo o usar directamente el nombre de usuario root y su contraseña. Para la autorización de usuarios de la base de datos MySQL, use el comando Grant.
- En su máquina ya se ha instalado Pythonpymysqlmódulo.
- Si no está familiarizado con las sentencias SQL, puede visitar nuestroTutorial básico de SQL
Ejemplo:
El siguiente ejemplo conecta con la base de datos TESTDB de MySQL:
Ejemplo (Python 3.0+)
La salida del script anterior es la siguiente:
Database version : 5.5.20-log
Crear tabla de base de datos
Si la conexión a la base de datos existe, podemos usar el método execute() para crear una tabla en la base de datos, como se muestra a continuación para crear la tabla EMPLOYEE:
Ejemplo (Python 3.0+)
Operación de inserción en la base de datos
El siguiente ejemplo usa la sentencia SQL INSERT para insertar registros en la tabla EMPLOYEE:
Ejemplo (Python 3.0+)
El ejemplo anterior también puede escribirse de la siguiente forma:
Ejemplo (Python 3.0+)
El siguiente código usa variables para pasar parámetros a las sentencias SQL:
..................................
user_id = "test123"
password = "password"
con.execute('insert into Login values( %s, %s)' % \
(user_id, password))
..................................
Operación de consulta en la base de datos
Python consulta MySQL usando el método fetchone() para obtener un solo dato y el método fetchall() para obtener varios datos.
- fetchone():Este método obtiene el siguiente conjunto de resultados de la consulta. El conjunto de resultados es un objeto.
- fetchall(): Recibe todas las filas de resultados devueltas.
- rowcount:Esta es una propiedad de solo lectura que devuelve el número de filas afectadas después de ejecutar el método execute().
Ejemplo:
Consultar todos los datos del campo salary (salario) mayor que 1000 en la tabla EMPLOYEE:
Ejemplo (Python 3.0+)
El resultado de ejecutar el script anterior es el siguiente:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Operación de actualización en la base de datos
La operación de actualización se usa para actualizar los datos de una tabla. El siguiente ejemplo incrementa en 1 el campo AGE de los registros con SEX igual a 'M' en la tabla TESTDB:
Ejemplo (Python 3.0+)
Operación de eliminación
La operación de eliminación se usa para borrar datos de una tabla. El siguiente ejemplo demuestra la eliminación de todos los datos con AGE mayor que 20 en la tabla EMPLOYEE:
Ejemplo (Python 3.0+)
Ejecutar transacciones
El mecanismo de transacciones puede garantizar la consistencia de los datos.
Una transacción debe tener cuatro propiedades: atomicidad, consistencia, aislamiento y durabilidad. Estas cuatro propiedades se conocen comúnmente como características ACID.
- Atomicidad: una transacción es una unidad de trabajo indivisible; las operaciones incluidas en la transacción se realizan todas o no se realiza ninguna.
- Consistencia: una transacción debe hacer que la base de datos pase de un estado consistente a otro. La consistencia está estrechamente relacionada con la atomicidad.
- Aislamiento: la ejecución de una transacción no puede ser interferida por otras transacciones. Es decir, las operaciones internas y los datos utilizados por una transacción están aislados de otras transacciones concurrentes, y las transacciones ejecutadas concurrentemente no pueden interferirse entre sí.
- Durabilidad. También se llama permanencia, se refiere a que una vez que una transacción se ha confirmado, los cambios que realiza en los datos de la base de datos deben ser permanentes. Las operaciones posteriores o fallos no deberían afectarla de ninguna manera.
La transacción de Python DB API 2.0 proporciona dos métodos: commit o rollback.
Ejemplo
Ejemplo (Python 3.0+)
Para bases de datos que admiten transacciones, en la programación de bases de datos en Python, cuando se crea un cursor, se inicia automáticamente una transacción de base de datos implícita.
El método commit() confirma todas las operaciones de actualización del cursor; el método rollback() revierte todas las operaciones del cursor actual. Cada método inicia una nueva transacción.
Manejo de errores
El DB API define algunos errores y excepciones de operaciones de base de datos; la siguiente tabla enumera estos errores y excepciones:
| Excepción | Descripción |
|---|---|
| Warning | Se activa cuando hay una advertencia grave, por ejemplo, cuando los datos insertados se truncan, etc. Debe ser una subclase de StandardError. |
| Error | Todas las demás clases de error excepto las advertencias. Debe ser una subclase de StandardError. |
| InterfaceError | Se activa cuando ocurre un error del propio módulo de interfaz de base de datos (no un error de la base de datos). Debe ser una subclase de Error. |
| DatabaseError | Se activa cuando ocurre un error relacionado con la base de datos. Debe ser una subclase de Error. |
| DataError | Se activa cuando ocurre un error durante el procesamiento de datos, por ejemplo: error de división por cero, datos fuera de rango, etc. Debe ser una subclase de DatabaseError. |
| OperationalError | Se refiere a errores que no controla el usuario, sino que ocurren al operar la base de datos. Por ejemplo: desconexión inesperada, nombre de base de datos no encontrado, fallo en el procesamiento de transacciones, error de asignación de memoria, etc. Debe ser una subclase de DatabaseError. |
| IntegrityError | Errores relacionados con la integridad, como fallos en la comprobación de claves foráneas, etc. Debe ser una subclase de DatabaseError. |
| InternalError | Errores internos de la base de datos, por ejemplo, cursor no válido, fallo de sincronización de transacciones, etc. Debe ser una subclase de DatabaseError. |
| ProgrammingError | Errores de programa, por ejemplo, tabla de datos no encontrada o ya existente, error de sintaxis en la instrucción SQL, número incorrecto de parámetros, etc. Debe ser una subclase de DatabaseError. |
| NotSupportedError | Error no soportado, se refiere al uso de funciones o API que la base de datos no admite. Por ejemplo, usar la función .rollback() en un objeto de conexión, pero la base de datos no admite transacciones o la transacción ya está cerrada. Debe ser una subclase de DatabaseError. |
A continuación se muestra la estructura de herencia de las excepciones:
Exception
|__Warning
|__Error
|__InterfaceError
|__DatabaseError
|__DataError
|__OperationalError
|__IntegrityError
|__InternalError
|__ProgrammingError
|__NotSupportedError Otras extensiones