Latest web development tutorials

operazioni di database MySQL pitone

Python un'interfaccia database standard per Python DB-API, Python DB-API fornisce un'interfaccia di programmazione delle applicazioni di database per gli sviluppatori.

database interface Python supporta database di grandi dimensioni, è possibile scegliere il progetto di database:

  • tafano
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • oracolo
  • Sybase

È possibile accedere alla interfaccia di database Python e API Vedi elenco dettagliato dei database supportati.

Diverso banca dati è necessario scaricare un modulo differente DB API, ad esempio, è necessario accedere a database Oracle e dati MySQL, è necessario scaricare il modulo di database Oracle e MySQL.

DB-API è una specifica che definisce un insieme di oggetti e database modalità devono accedere, per fornire un'interfaccia coerente per accedere a una vasta gamma di sistema di database sottostante e una varietà di programma di interfaccia database.

Python DB-API, per la maggior parte del database implementa l'interfaccia, usarlo dopo la connessione al database, è possibile utilizzare lo stesso modo ogni database.

Python DB-API utilizzando il processo:

  • L'introduzione del modulo API.
  • Collegarsi al database.
  • Eseguire istruzioni SQL e stored procedure.
  • Chiudere la connessione al database.

Che cosa è MySQLdb?

MySQLdb è un'interfaccia per collegamento a database Mysql Python, che implementa la specifica API Python Database V2.0, basato sulla definizione delle API C di MySQL.


Come installare MySQLdb?

Per scrivere gli script di MySQL con DB-API, è necessario assicurarsi di avere installato MySQL. Copiare il codice riportato di seguito, ed eseguirlo:

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

import MySQLdb

Se l'uscita è il seguente dopo l'esecuzione, il che significa che non si dispone è installato il modulo MySQLdb:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

Installare MySQLdb, visitare http://sourceforge.net/projects/mysql-python , (la piattaforma Linux è possibile accedere: https://pypi.python.org/pypi/MySQL-python ) Da qui scegliere per la propria piattaforma pacchetto di installazione, pre-compilato nel file binari ed il pacchetto di codice sorgente.

Se si seleziona versione binaria, il processo di installazione richiede di completare l'installazione di base. Se si installa dal codice sorgente, è necessario passare alla directory di rilascio di livello superiore MySQLdb, e digitare il seguente 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: Assicurarsi di avere privilegi di root per installare i moduli descritti in precedenza.


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

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

Database version : 5.0.45

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

Inserisci database

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

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

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

esempio:

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

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

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

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.

esempio:

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