Latest web development tutorials

operações de python de banco de dados MySQL

interface de banco de dados padrão do Python para o Python DB-API, Python DB-API fornece uma interface de programação de aplicativo de banco de dados para desenvolvedores.

interface de banco de dados Python suporta grandes bancos de dados, você pode escolher o seu projeto de banco de dados:

  • moscardo
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • oráculo
  • Sybase

Você pode acessar a interface de banco de dados de Python e API Veja lista detalhada dos bancos de dados suportados.

banco de dados diferente, você precisará baixar um módulo DB API diferente, por exemplo, você precisa acessar bancos de dados Oracle e de dados do MySQL, você precisa baixar o módulo de banco de dados Oracle e MySQL.

DB-API é uma especificação que define um conjunto de objetos e o banco de dados modo deve acessar, a fim de fornecer uma interface consistente para acessar uma grande variedade de sistema de banco de dados subjacente e uma variedade de programa de interface de banco de dados.

DB-API do Python, para a maioria da base de dados implementa a interface, usá-lo depois de conectar o banco de dados, você pode usar o mesmo modo, cada banco de dados.

Python DB-API usando o processo:

  • A introdução do módulo de API.
  • Se conectar ao banco de dados.
  • Executar instruções SQL e procedimentos armazenados.
  • Fechar a conexão com o banco.

O que é MySQLdb?

MySQLdb é uma interface para ligação de banco de dados Mysql Python, que implementa o Python especificação API de banco de dados V2.0, com base na criação da API C do MySQL.


Como instalar MySQLdb?

Para escrever scripts MySQL com DB-API, você deve garantir que você tenha instalado MySQL. Copie o seguinte código e executá-lo:

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

import MySQLdb

Se a saída é o seguinte após a execução, o que significa que você não tem módulo MySQLdb está instalado:

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 , (a plataforma Linux pode ser acessado: https://pypi.python.org/pypi/MySQL-python ) A partir daqui escolher para a sua plataforma pacote de instalação, pré-compilados em binários e pacote de código-fonte.

Se você selecionar versão binária, o processo de instalação para concluir a instalação básica. Se instalar a partir do código-fonte, você precisa mudar para MySQLdb diretório de nível superior liberação e digite o seguinte 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: Certifique-se de ter privilégios de root para instalar os módulos descritos acima.


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

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

Database version : 5.0.45

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

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

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

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

exemplo:

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

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

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

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.

exemplo:

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