Latest web development tutorials

pitón operaciones de base de datos MySQL

Python interfaz de base de datos estándar para el Python DB-API, Python DB-API proporciona una interfaz de programación de aplicaciones de base de datos para los desarrolladores.

interfaz de base de datos de Python soporta grandes bases de datos, puede elegir su proyecto de base de datos:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • interbase
  • oráculo
  • Sybase

Puede acceder a la interfaz de base de datos de Python y API Ver lista detallada de las bases de datos soportadas.

Diferente base de datos que tendrá que descargar un módulo API DB diferente, por ejemplo, necesita acceder a bases de datos Oracle y datos MySQL, es necesario descargar el módulo de base de datos Oracle y MySQL.

DB-API es una especificación que define un conjunto de objetos y la base de datos de modo deben acceder, a fin de proporcionar una interfaz consistente para acceder a una gran variedad de sistema de base de datos subyacente y una variedad de programa de interfaz de base de datos.

DB-API de Python, la mayor parte de la base de datos implementa la interfaz, lo utilizan después de conectar la base de datos, puede utilizar la misma manera cada base de datos.

Python DB-API del proceso:

  • La introducción de módulo API.
  • Para conectarse a la base de datos.
  • Ejecutar sentencias SQL y procedimientos almacenados.
  • Cierre la conexión de base de datos.

¿Cuál es MySQLdb?

MySQLdb es una interfaz para Python MySQL base de datos de enlace, que implementa la especificación API de base de datos V2.0 Python, basado en el establecimiento de la API C de MySQL.


¿Cómo instalar MySQLdb?

Para escribir secuencias de comandos de MySQL con DB-API, debe asegurarse de que se ha instalado MySQL. Copia el código siguiente y ejecutarlo:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

Si la salida es el siguiente después de la ejecución, lo que significa que no tiene instalado el módulo MySQLdb:

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

Instalar MySQLdb, visite http://sourceforge.net/projects/mysql-python , (la plataforma Linux puede acceder a: https://pypi.python.org/pypi/MySQL-python ) A partir de aquí elija para su plataforma paquete de instalación, pre-compilados en archivos binarios y el código fuente del paquete.

Si selecciona versión binaria, el proceso de instalación para completar la instalación básica. Si va a instalar desde el código fuente, es necesario cambiar al directorio de nivel superior de liberación MySQLdb, y escriba el siguiente comando:

$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

Nota: Asegúrese de que tiene privilegios de superusuario para instalar los módulos descritos anteriormente.


La conectividad de base de datos

Antes de conectarse a la base de datos, asegúrese de que los siguientes elementos:

  • Se ha creado una base de datos TESTDB.
  • En la base de datos TESTDB de haber creado la tabla EMPLOYEE
  • EMPLEADOS FIRST_NAME campo de tabla, APELLIDOS, edad, sexo e ingresos.
  • Los usuarios se conectan a la base de datos utilizando TESTDB llamado "testuser", contraseña "test123", puede establecer su propio nombre de usuario y contraseña directamente o raíz, licencia de usuario de base de datos MySQL, por favor utilice el comando Grant.
  • En la máquina ya instalada módulo de Python MySQLdb.
  • Si no está familiarizado con la instrucción SQL, puede visitar nuestra base tutorial de SQL

Ejemplo:

Los siguientes ejemplos de TESTDB Mysql enlace de datos:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

La aplicación de la secuencia de comandos anterior da salida a los resultados son los siguientes:

Database version : 5.0.45

Crear una tabla de base de datos

Si existe la conexión de base de datos, podemos usar el método execute () para crear tablas de la base de datos, cree una tabla EMPLOYEE se muestra en la siguiente:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

insertar base de datos

En el siguiente ejemplo se utiliza ejecutar una instrucción SQL INSERT para insertar un registro a la tabla EMPLOYEE:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 关闭数据库连接
db.close()

El ejemplo anterior también se puede escribir como sigue:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

Ejemplo:

El siguiente código utiliza variables para pasar parámetros a una instrucción SQL:

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

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

consultas de bases de datos

Python consulta MySQL utilizando el método fetchone () para obtener un solo dato utilizando fetchall () para obtener una pluralidad de datos.

  • fetchone (): Este método obtiene el siguiente conjunto de resultados de consulta.El conjunto de resultados es un objetivo
  • fetchall (): devuelve el resultado de recibir todas las filas.
  • recuento de filas: Este es un atributo de sólo lectura, y devuelve la ejecución ejecutar el método () después de que el número de filas afectadas.

Ejemplo:

salario campo de datos Descubre tabla EMPLOYEE (salario) es más grande que todos 1000:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # 打印结果
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 关闭数据库连接
db.close()

Los resultados de la ejecución de secuencias de comandos anterior son los siguientes:

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

actualizaciones de la base

Datos operación de actualización para actualizar la tabla de datos, los siguientes ejemplos TestDB campo SEXO mesa de todos los cambios en 'M', campo de AGE se incrementa en 1:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

supresión

Borrar datos de borrar los datos de la tabla, el siguiente ejemplo demuestra borrar datos en la tabla EMPLOYEE AGE es mayor que 20, todos los datos:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭连接
db.close()

Asuntos ejecutivos

mecanismo de transacción para asegurar la consistencia de los datos.

Los servicios deben tener cuatro propiedades: atomicidad, coherencia, aislamiento, durabilidad. Estas cuatro propiedades se refieren como las propiedades ACID menudo.

  • Atómica (atomicidad). Una transacción es una unidad de trabajo indivisible, tales operaciones se incluyen en la transacción ya sea hacer o no hacer.
  • Coherencia (consistencia). Los servicios deben ser cambiadas para hacer la base de datos de un estado consistente a otro estado consistente. La consistencia y la atomicidad están estrechamente relacionados.
  • Aislamiento (aislamiento). Ejecutar una transacción no puede ser otra interferencia de las transacciones. Esa es una transacción de funcionamiento interno y el uso de otro concurrentemente transacción de datos está aislado y no puede interferir entre sí entre las transacciones individuales se ejecutan concurrentemente.
  • Persistencia (durabilidad). Persistente también llamado permanente (permanencia), que significa que una vez que se confirma una transacción, modificar los datos en la base de datos debe ser permanente. Los siguientes operaciones o su fracaso no debería tener ningún impacto.

Python DB API 2.0 proporciona dos métodos de operación de confirmación o retrotracción.

Ejemplo:

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

Para bases de datos transaccionales, programación de bases de datos en Python, cuando se establece el cursor, se inicia automáticamente una base de datos de transacciones invisibles.

método commit () para todo el método de actualización de cursores, rollback () para hacer retroceder todas las operaciones del cursor actual. Cada método se ha iniciado un nuevo negocio.


Control de errores

API DB define algunos errores y el funcionamiento anormal de la base de datos, la siguiente tabla se enumeran los errores y excepciones:

anormal descripción
advertencia Cuando hay una seria advertencia para disparar, como la inserción de datos se trunca, y así sucesivamente. Debe ser una subclase de StandardError.
error Todas las demás clases de error distintos de las advertencias. Debe ser una subclase de StandardError.
InterfaceError Se activa cuando el módulo de interfaz de base de datos tiene su propio error (en lugar de una base de datos de error) se produce. Debe ser una subclase de error.
DatabaseError Disparador y errores relacionados con bases de datos. Debe ser una subclase de error.
DataError Cuando no se produjo un error de procesamiento de datos cuando se activa, por ejemplo: error de división por cero, los datos fuera de rango, y así sucesivamente. Debe ser una subclase de DatabaseError.
OperationalError Se refiere a un no usuario controlado, pero se produjo el error, mientras que la base de datos. Por ejemplo: desconectado accidentalmente, no se encuentra el nombre de la base de datos, la operación falla, el error de asignación de memoria, etc. ocurrió operaciones error de base de datos. Debe ser una subclase de DatabaseError.
IntegrityError errores relacionados con la integridad, como un cheque clave externa falla y similares. Debe ser DatabaseError subclase.
InternalError error de base de datos interna, tal como un cursor (cursor) falla, la transacción de fallo de sincronización y así sucesivamente. Debe ser DatabaseError subclase.
ProgrammingError Los errores de procedimiento, como la tabla de datos (tabla) que no se encuentra o que ya existe, error de sintaxis SQL, un número de error de parámetros, y así sucesivamente. Debe ser una subclase de DatabaseError.
NotSupportedError No se admite el error, se refiere al uso de funciones tales como API o base de datos no soporta. Por ejemplo, el uso de la función .rollback objeto de conexión (), pero la base de datos no admite transacciones u operación se ha cerrado. Debe ser una subclase de DatabaseError.