Latest web development tutorials

connessione al database MySQL python3

In questo lavoro, si introduce python3 uso PyMySQL la connessione al database, e semplice CRUD.

Che cosa è PyMySQL?

PyMySQL per una versione server MySQL connessione al database in Python3.x, python2 in uso MySQLdb.

PyMySQL seguire Python specifica v2.0 API di database e contiene libreria client puro-Python MySQL.


installazione PyMySQL

Prima di utilizzare PyMySQL, dobbiamo garantire installato PyMySQL.

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

Se non è già installato, è possibile utilizzare il seguente comando per installare l'ultima versione di PyMySQL:

$ pip install PyMySQL

Se il sistema non supporta il comando pip, è possibile utilizzare i seguenti installati:

1, usando il comando git per scaricare il pacchetto di installazione (è anche possibile scaricare manualmente):

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

2, se avete bisogno di sviluppare un numero di versione, è possibile utilizzare il comando curl per l'installazione:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

Nota: Assicurarsi di avere privilegi di root per installare i moduli descritti in precedenza.

Il processo di installazione può apparire "ImportError: No module named setuptools" messaggio di errore, il che significa che non è necessario installare setuptools, è possibile accedere https://pypi.python.org/pypi/setuptools trovare il metodo di installazione di ogni sistema.

installazione di Linux Esempio:

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

Database Connectivity

Prima di connessione al database, assicurarsi che i seguenti elementi:

  • È stato creato un database di TESTDB.
  • Nel database di TESTDB aver creato il DIPENDENTE tavolo
  • DIPENDENTI campo tavolo FIRST_NAME, LAST_NAME, età, sesso e reddito.
  • Gli utenti si connettono al database utilizzando TESTDB denominato "testuser", password "test123", è possibile impostare il proprio nome utente e password direttamente o radice, Mysql licenza d'uso del database, si prega di utilizzare il comando di Grant.
  • Sulla macchina già installata modulo Python MySQLdb.
  • Se non si ha familiarità con l'istruzione SQL, è possibile visitare il nostro base SQL esercitazione

esempio:

I seguenti esempi di collegamento al database Mysql TESTDB:

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

L'attuazione del suddetto script emette i risultati sono i seguenti:

Database version : 5.5.20-log

Creare una tabella di database

Se è presente la connessione al database, possiamo utilizzare il metodo execute () per creare le tabelle del database, creare una tabella di DIPENDENTE mostrato nella figura seguente:

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

Inserisci database

L'esempio seguente utilizza eseguire un'istruzione SQL INSERT per inserire un record al dipendente tabella:

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

L'esempio precedente può anche essere scritta come 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()

Il codice seguente utilizza variabili per passare parametri a un'istruzione SQL:

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

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

query di database

Python query MySQL utilizzando il metodo fetchOne () per ottenere un unico dati utilizzando fetchall () per ottenere una pluralità di dati.

  • fetchOne (): questo metodo ottiene il prossimo risultato della query.Il set di risultati è un obiettivo
  • fetchall (): restituisce il risultato di ricevere tutte le righe.
  • conteggio delle righe: Questo è un attributo di sola lettura, e restituisce l'esecuzione metodo execute () dopo il numero di righe interessate.

esempio:

Scopri DIPENDENTI tabella degli stipendi (salario) campo di dati è più grande di tutti i 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()

I risultati di esecuzione di script sopra sono i seguenti:

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

aggiornamenti del database

Dati operazione di aggiornamento per l'aggiornamento della tabella di dati, i seguenti esempi TestDB tavolo campo EROTICHE tutte le modifiche al 'M', campo AGE viene incrementato di 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()

cancellazione

Cancellare i dati cancellare i dati per la tabella, il seguente esempio dimostra cancellare i dati nella tabella di AGE dipendente è maggiore di 20, tutti i dati:

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

affari esecutivi

meccanismo di operazione per garantire la coerenza dei dati.

I servizi dovrebbero avere quattro proprietà: atomicità, coerenza, isolamento, durata. Queste quattro proprietà sono spesso indicati come le proprietà ACID.

  • Atomic (atomicità). Una transazione è un'unità indivisibile di lavoro, tali operazioni sono incluse nella transazione o fare o non fare.
  • La coerenza (coerenza). I servizi devono essere modificate per rendere il database da uno stato consistente ad un altro stato coerente. Coerenza e atomicità sono strettamente correlati.
  • Isolation (isolamento). Eseguire una transazione non può essere altra interferenza transazioni. Questa è un'operazione funzionamento interno e l'uso di altri concorrenza transazione dei dati è isolato e non può interferire tra loro tra singole operazioni eseguite contemporaneamente.
  • Persistenza (durata). Persistente chiamato anche permanente (permanenza), significa che una volta che una transazione commit, cambiare i propri dati nel database dovrebbe essere permanente. Le seguenti altre operazioni o il suo fallimento non dovrebbero avere alcun impatto.

Python DB API 2.0 fornisce due metodi di transazione commit o rollback.

Esempi

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

Per database transazionale, la programmazione di database in Python, quando si stabilisce il cursore, inizia automaticamente una transazione di database invisibile.

commit () metodo per tutto il metodo di aggiornamento del cursore, rollback () per ripristinare tutte le operazioni della corrente del cursore. Ogni metodo ha iniziato una nuova attività.


Gestione degli errori

DB API definisce alcuni errori e funzionamento anomalo del database, il seguente tabella elenca gli errori e le eccezioni:

anormale descrizione
avvertimento Quando vi è un serio avvertimento per attivare, ad esempio l'inserimento di dati viene troncato, e così via. Dev'essere una sottoclasse di StandardError.
errore Tutte le altre classi di errore diversi avvertimenti. Dev'essere una sottoclasse di StandardError.
InterfaceError Viene eseguito quando il modulo di interfaccia di database ha un proprio errore (invece di un database di errore) si verifica. Dev'essere una sottoclasse di errore.
DatabaseError Trigger e gli errori relativi al database. Dev'essere una sottoclasse di errore.
DataError Quando vi è verificato un errore di elaborazione dei dati in caso di attivazione, ad esempio: divisione per zero errore, i dati fuori portata, e così via. Dev'essere una sottoclasse di DatabaseError.
OperationalError Si riferisce ad un non-controllato dall'utente, ma l'errore si è verificato mentre il database. Per esempio: accidentalmente scollegato, il nome del database non viene trovato, l'operazione non riesce, errore di allocazione della memoria, si è verificato ecc operazioni di errore del database. Dev'essere una sottoclasse di DatabaseError.
IntegrityError errori di integrità correlati, come ad esempio un controllo di chiave esterna non riesce e simili. Dev'essere DatabaseError sottoclasse.
InternalError errore di database interno, come ad esempio un cursore (cursore) fallisce, la sincronizzazione di transazione fallimento e così via. Dev'essere DatabaseError sottoclasse.
ProgrammingError errori procedurali, come la tabella di dati (tabella) non trovato o esiste già, errore di sintassi SQL, un numero di errore di parametri, e così via. Dev'essere una sottoclasse di DatabaseError.
NotSupportedError Non supportato errore, si riferisce all'uso di funzioni quali API o database non supporta. Ad esempio, utilizzando .rollback sulla funzione oggetto di connessione (), ma il database non supporta le transazioni o la transazione è stata chiusa. Dev'essere una sottoclasse di DatabaseError.