Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Python - Acceso a la base de datos MySQL

Página anteriorPágina siguiente

El estándar de Python para interfaces de bases de datos es Python DB-API. La mayoría de las interfaces de bases de datos de Python se adhieren a este estándar.

Puede elegir la base de datos adecuada para su aplicación. Python Database API admite una amplia gama de servidores de bases de datos como −

Aquí está la lista de interfaces de base de datos de Python disponibles:API e interfaces de base de datos de Python. Debe descargar un módulo DB API independiente para cada base de datos a la que necesite acceder. Por ejemplo, si necesita acceder a una base de datos Oracle además de una base de datos MySQL, debe descargar los módulos de base de datos Oracle y MySQL.

La API de base de datos proporciona un estándar mínimo para trabajar con bases de datos utilizando estructuras y sintaxis de Python siempre que sea posible. Esta API incluye lo siguiente −

Aprenderíamos todos los conceptos usando MySQL, así que hablemos del módulo MySQLdb.

¿Qué es MySQLdb?

MySQLdb es una interfaz para conectarse a un servidor de base de datos MySQL desde Python. Implementa la API de base de datos de Python v2.0 y está construida sobre la API C de MySQL.

¿Cómo instalo MySQLdb?

Antes de continuar, asegúrese de tener MySQLdb instalado en su máquina. Simplemente escriba lo siguiente en su secuencia de comandos de Python y ejecútelo −

#!/usr/bin/python

import MySQLdb

Si produce el siguiente resultado, significa que el módulo MySQLdb no está instalado −

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

Para instalar el módulo MySQLdb, use el siguiente comando −

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Nota − Asegúrese de tener privilegios de root para instalar el módulo anterior.

Conexión de base de datos

Antes de conectarse a una base de datos MySQL, asegúrese de lo siguiente −

Ejemplo

El siguiente es el ejemplo de conexión con la base de datos MySQL "TESTDB"

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

Mientras ejecuta este script, produce el siguiente resultado en mi máquina Linux.

Database version : 5.0.45

Si se establece una conexión con la fuente de datos, se devuelve un objeto de conexión y se guarda en db para uso posterior, de lo contrario db se establece en Ninguno. A continuación, db objeto se utiliza para crear un cursor objeto, que a su vez se utiliza para ejecutar consultas SQL. Finalmente, antes de salir, se asegura de que se cierre la conexión a la base de datos y se liberen los recursos.

Crear tabla de base de datos

Una vez que se establece una conexión con la base de datos, estamos listos para crear tablas o registros en las tablas de la base de datos usando ejecutar método del cursor creado.

Ejemplo

Vamos a crear la tabla de base de datos EMPLEADO −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

Operación INSERTAR

Es necesario cuando desea crear sus registros en una tabla de base de datos.

Ejemplo

El siguiente ejemplo, ejecuta SQL INSERT instrucción para crear un registro en la tabla EMPLEADO −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

El ejemplo anterior se puede escribir de la siguiente manera para crear consultas SQL dinámicamente −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Ejemplo

El siguiente segmento de código es otra forma de ejecución en la que puede pasar parámetros directamente −

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

Operación LEER

LEER La operación en cualquier base de datos significa obtener información útil de la base de datos.

Una vez que se establece nuestra conexión con la base de datos, está listo para realizar una consulta en esta base de datos. Puede utilizar fetchone() método para obtener un registro único o fetchall() método para obtener múltiples valores de una tabla de base de datos.

Ejemplo

El siguiente procedimiento consulta todos los registros de la tabla EMPLEADO que tienen un salario superior a 1000 −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

Esto producirá el siguiente resultado −

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

Operación de actualización

ACTUALIZAR Operación en cualquier base de datos significa actualizar uno o más registros, que ya están disponibles en la base de datos.

El siguiente procedimiento actualiza todos los registros que tienen SEXO como 'M' . Aquí, aumentamos la EDAD de todos los machos en un año.

Ejemplo

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Operación ELIMINAR

La operación DELETE es necesaria cuando desea eliminar algunos registros de su base de datos. El siguiente es el procedimiento para eliminar todos los registros de EMPLEADO donde la EDAD es mayor a 20 −

Ejemplo

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Realización de transacciones

Las transacciones son un mecanismo que asegura la consistencia de los datos. Las transacciones tienen las siguientes cuatro propiedades −

Python DB API 2.0 proporciona dos métodos para confirmar o revertir una transacción.

Ejemplo

Ya sabes cómo implementar transacciones. Aquí hay de nuevo un ejemplo similar −

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

Operación COMMIT

Confirmar es la operación, que da una señal verde a la base de datos para finalizar los cambios, y después de esta operación, no se puede revertir ningún cambio.

Aquí hay un ejemplo simple para llamar a commit método.

db.commit()

Operación ROLLBACK

Si no está satisfecho con uno o más de los cambios y desea revertir esos cambios por completo, utilice rollback() método.

Aquí hay un ejemplo simple para llamar a rollback() método.

db.rollback()

Desconectando la base de datos

Para desconectar la conexión de la base de datos, utilice el método close().

db.close()

Si el usuario cierra la conexión a una base de datos con el método close(), la base de datos revierte cualquier transacción pendiente. Sin embargo, en lugar de depender de cualquiera de los detalles de implementación de nivel inferior de la base de datos, sería mejor que su aplicación llame explícitamente a la confirmación o reversión.

Manejo de errores

Hay muchas fuentes de errores. Algunos ejemplos son un error de sintaxis en una declaración SQL ejecutada, una falla de conexión o llamar al método de búsqueda para un identificador de declaración ya cancelado o finalizado.

La DB API define una serie de errores que deben existir en cada módulo de base de datos. La siguiente tabla enumera estas excepciones.

Sr.No. Excepción y descripción
1

Advertencia

Se utiliza para problemas no fatales. Debe subclasificar StandardError.

2

Error

Clase base para errores. Debe subclasificar StandardError.

3

Error de interfaz

Se utiliza para errores en el módulo de la base de datos, no en la propia base de datos. Debe subclasificar Error.

4

Error de base de datos

Se utiliza para errores en la base de datos. Debe subclasificar Error.

5

Error de datos

Subclase de DatabaseError que hace referencia a errores en los datos.

6

Error operativo

Subclase de DatabaseError que hace referencia a errores como la pérdida de conexión a la base de datos. Estos errores generalmente están fuera del control del scripter de Python.

7

Error de integridad

Subclase de DatabaseError para situaciones que dañarían la integridad relacional, como restricciones de unicidad o claves foráneas.

8

Error interno

Subclase de DatabaseError que hace referencia a errores internos del módulo de la base de datos, como que un cursor ya no esté activo.

9

Error de programación

Subclase de DatabaseError que se refiere a errores como un nombre de tabla incorrecto y otras cosas que se le pueden atribuir con seguridad.

10

Error no compatible

Subclase de DatabaseError que se refiere a intentar llamar a una funcionalidad no admitida.

Sus secuencias de comandos de Python deberían manejar estos errores, pero antes de usar cualquiera de las excepciones anteriores, asegúrese de que MySQLdb sea compatible con esa excepción. Puede obtener más información sobre ellos leyendo la especificación DB API 2.0.


python

  1. Tipos de datos de Python
  2. Operadores de Python
  3. Declaración de paso de Python
  4. Argumentos de la función de Python
  5. Diccionario de Python
  6. Iteradores de Python
  7. Cierres Python
  8. Fecha y hora de Python
  9. Sueño de Python ()
  10. Python - Descripción general
  11. Pitón - Números