Latest web development tutorials

la conexión de base de datos MySQL python3

En este trabajo, se introduce python3 uso PyMySQL conectarse a la base de datos, y CRUD sencillo.

¿Cuál es PyMySQL?

PyMySQL para una versión del servidor MySQL conexión de base de datos en Python3.x, python2 en uso MySQLdb.

PyMySQL sigue Python especificación v2.0 API de base de datos y contiene la biblioteca cliente de MySQL-Python puro.


instalación PyMySQL

Antes de utilizar PyMySQL, tenemos que garantizar instalado PyMySQL.

PyMySQL de descarga: https: //github.com/PyMySQL/PyMySQL.

Si no está instalado, podemos usar el siguiente comando para instalar la última versión de PyMySQL:

$ pip install PyMySQL

Si su sistema no admite comandos de pepita, puede utilizar los siguientes productos:

1, utilizando el comando git para descargar el paquete de instalación (también se puede descargar de forma manual):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2, si usted necesita para desarrollar un número de versión, puede utilizar el comando curl para instalar:

$ # 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 que tiene privilegios de superusuario para instalar los módulos descritos anteriormente.

El proceso de instalación puede aparecer "ImportError: Sin módulo denominado setuptools" mensaje de error, lo que significa que no tiene que instalar setuptools, puede acceder a https://pypi.python.org/pypi/setuptools encontrar el método de instalación de cada sistema.

Ejemplo de instalación de Linux:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

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/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 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.5.20-log

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/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3

import pymysql

# 打开数据库连接
db = pymysql.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:
   # 如果发生错误则回滚
   db.rollback()

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

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

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.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)
   # 执行sql语句
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

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

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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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.

Ejemplos

# 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.