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:
ititititititititititititititititit user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) ititititititititititititititititit
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. |