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