Latest web development tutorials

conexão com o banco Python3 MySQL

Neste artigo, apresentamos Python3 uso PyMySQL conectar ao banco de dados e CRUD simples.

O que é PyMySQL?

PyMySQL para uma versão do servidor MySQL conexão com o banco em Python3.x, python2 em uso mysqldb.

PyMySQL siga Python especificação v2.0 API de banco de dados e contém biblioteca cliente puro-Python MySQL.


instalação PyMySQL

Antes de usar PyMySQL, precisamos garantir PyMySQL instalado.

PyMySQL Download: https: //github.com/PyMySQL/PyMySQL.

Se ainda não estiver instalado, podemos usar o seguinte comando para instalar a última versão do PyMySQL:

$ pip install PyMySQL

Se o seu sistema não suporta comandos pip, você pode usar o seguinte instalado:

1, usando o comando git para baixar o pacote de instalação (você também pode baixar manualmente):

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

2, se você precisa para desenvolver um número de versão, você pode usar o 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: Certifique-se de ter privilégios de root para instalar os módulos descritos acima.

O processo de instalação pode aparecer "ImportError: No módulo chamado setuptools" mensagem de erro, o que significa que você não tem que instalar setuptools, você pode acessar https://pypi.python.org/pypi/setuptools encontrar o método de cada sistema de instalação.

instalação do Linux Exemplo:

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

Database Connectivity

Antes de conectar ao banco de dados, verifique se os seguintes itens:

  • Você criou um banco de dados TESTDB.
  • No banco de dados TESTDB de ter criado a tabela EMPLOYEE
  • campo de tabela EMPREGADO FIRST_NAME, LAST_NAME, idade, sexo e renda.
  • Os usuários se conectam ao banco de dados usando TESTDB chamado "testuser", password "test123", você pode definir o seu próprio nome de usuário e senha diretamente ou raiz, de licença de usuário de banco de dados MySQL, por favor, use o comando Grant.
  • Em sua máquina já instalado Python MySQLdb.
  • Se você não estiver familiarizado com a instrução SQL, você pode visitar a nossa base SQL tutorial

exemplo:

Os seguintes exemplos de banco de dados link TESTDB MySQL:

#!/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()

Implementação do script acima produz os resultados são os seguintes:

Database version : 5.5.20-log

Criar uma tabela de banco de dados

Se existe a conexão de banco de dados, podemos usar o método execute () para criar tabelas do banco de dados, criar uma tabela EMPLOYEE mostrado no seguinte:

#!/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()

inserção de banco de dados

O exemplo a seguir usa executar uma instrução SQL INSERT para inserir um registro para o empregado de mesa:

#!/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()

O exemplo acima pode também ser escrito como se segue:

#!/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()

O código a seguir utiliza variáveis ​​para passar parâmetros para uma instrução SQL:

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

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

consultas de banco de dados

Python consulta mysql usando método fetchone () para obter um conjunto de dados único utilizando fetchAll método () para se obter uma pluralidade de dados.

  • fetchone (): Este método obtém o próximo conjunto de resultados da consulta.O conjunto de resultados é um alvo
  • fetchall (): retorna o resultado para receber todas as linhas.
  • rowcount: Este é um atributo somente leitura, e retorna a execução método execute () após o número de linhas afetadas.

exemplo:

Descubra EMPREGADO tabela salarial (salário) campo de dados é maior do que todos de 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()

Os resultados da execução acima de script são os seguintes:

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

atualizações de banco de dados

Dados atualizar operação para atualizar a tabela de dados, os seguintes exemplos TESTDB mesa SEX campo de todas as alterações a 'M', campo de idade é incrementado por 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()

eliminação

Excluir dados apagar os dados para a tabela, o seguinte exemplo demonstra apagar os dados na AGE tabela funcionário é superior a 20, todos os dados:

#!/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()

Assuntos executivos

mecanismo de transação para garantir a consistência dos dados.

Serviços deve ter quatro propriedades: atomicidade, consistência, isolamento, durabilidade. Estas quatro propriedades são muitas vezes referidas como as propriedades ACID.

  • Atómica (atomicidade). Uma transação é uma unidade indivisível de trabalho, tais operações são incluídos na transação, quer fazer ou não fazer.
  • Consistência (consistência). Os serviços devem ser mudados para tornar o banco de dados de um estado consistente para outro estado consistente. Consistência e atomicidade estão intimamente relacionados.
  • Isolamento (isolamento). Executar uma operação não pode ser outra interferência transações. Essa é uma transação operação interna e uso de outras simultaneidade transação de dados é isolado e não podem interferir uns com os outros entre as operações individuais executadas simultaneamente.
  • Persistência (durabilidade). Persistente também chamado permanente (permanência), isso significa que uma vez que uma transação é confirmada, alterar seus dados no banco de dados deve ser permanente. Os seguintes outras operações ou seu fracasso não deve ter nenhum impacto.

Python DB API 2.0 fornece dois métodos de operação confirmação ou anulação.

Exemplos

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

Para banco de dados transacional, a programação de banco de dados em Python, quando o cursor é estabelecido, automaticamente começa uma transação de banco de dados invisível.

comprometer método () para todos o método atualizações cursor, rollback () para reverter todas as operações do cursor atual. Cada método foi iniciado um novo negócio.


Tratamento de erros

DB API define alguns erros e operação anormal do banco de dados, a seguinte tabela lista os erros e exceções:

anormal descrição
aviso Quando existe um aviso grave para provocar, como a inserção de dados são truncados, e assim por diante. Deve ser uma subclasse de StandardError.
erro Todos os outros que não sejam advertências classes de erro. Deve ser uma subclasse de StandardError.
InterfaceError É acionado quando o módulo de interface de banco de dados tem seu próprio erro (em vez de um banco de dados de erro) ocorre. Deve ser uma subclasse de erro.
DatabaseError Trigger e erros relacionados ao banco de dados. Deve ser uma subclasse de erro.
DataError Quando há ocorreu um erro de processamento de dados quando acionado, por exemplo: divisão por zero erro, os dados fora da faixa, e assim por diante. Deve ser uma subclasse de DatabaseError.
OperationalError Refere-se a um não-usuário controlado, mas o erro ocorreu enquanto o banco de dados. Por exemplo: acidentalmente desligado, o nome do banco de dados não for encontrado, a operação falhar, erro de alocação de memória, ocorreu etc. operações de banco de dados erro. Deve ser uma subclasse de DatabaseError.
IntegrityError erros relacionados a integridade, como a verificação de chave estrangeira falhou e similares. Deve ser DatabaseError subclasse.
InternalError erro de banco de dados interno, tal como um cursor (cursor) falhar, a operação de sincronização falha e assim por diante. Deve ser DatabaseError subclasse.
ProgrammingError erros processuais, tais como tabela de dados (tabela) não foi encontrado ou já existe, erro de sintaxe SQL, um número de erro de parâmetros e similares. Deve ser uma subclasse de DatabaseError.
NotSupportedError Não suportado erro, refere-se à utilização de funções, tais como API ou base de dados não suporta. Por exemplo, usando .rollback na função de objeto de conexão (), mas o banco de dados não suporta transações ou transação foi fechada. Deve ser uma subclasse de DatabaseError.