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