Latest web development tutorials

Python Operationen MySQL-Datenbank

Python Standard-Datenbank-Schnittstelle für den Python DB-API bietet Python DB-API eine Datenbank-Anwendung Programmierschnittstelle für Entwickler.

Python-Datenbank-Schnittstelle unterstützt sehr große Datenbanken, die Sie Ihre Datenbank-Projekt wählen:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • ınterbase
  • Orakel
  • Sybase

Sie können die Access - Schnittstelle Python - Datenbank und API detaillierte Liste der unterstützten Datenbanken.

Verschiedene Datenbank benötigen Sie einen anderen DB-API-Modul zum Download, zum Beispiel, müssen Sie Oracle-Datenbanken und MySQL-Daten zugreifen zu können, benötigen Sie den Oracle und MySQL-Datenbank-Modul zum Download bereit.

DB-API ist eine Spezifikation, die eine Reihe von Objekten und der Datenbank definiert muss Modus zugreifen, um eine einheitliche Schnittstelle, um eine Vielzahl von zugrunde liegenden Datenbanksystem und eine Vielzahl von Datenbank-Interface-Programm zugreifen zu können.

Python DB-API, für die meisten der Datenbank, die die Schnittstelle implementiert, verwenden Sie es nach der Datenbank verbinden, können Sie die gleiche Art und Weise jede Datenbank verwenden.

Python DB-API unter Verwendung des Verfahrens:

  • Die Einführung von API-Modul.
  • Lassen Sie sich mit der Datenbank verbunden.
  • Ausführen von SQL-Anweisungen und gespeicherte Prozeduren.
  • Schließen Sie die Datenbankverbindung.

Was ist MySQLdb?

MySQLdb ist eine Schnittstelle für Python Mysql Datenbank-Link, der die Python Database API-Spezifikation V2.0 implementiert, auf der Grundlage der Errichtung der MySQL-C-API.


Wie MySQLdb zu installieren?

MySQL-Skripte mit DB-API zu schreiben, müssen Sie sicherstellen, dass Sie MySQL installiert haben. Kopieren Sie den folgenden Code ein, und führen Sie es aus:

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

import MySQLdb

Wenn die Ausgabe wie nach der Ausführung folgt, das heißt, Sie müssen nicht MySQLdb Modul installiert ist:

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

Installieren Sie MySQLdb, besuchen http://sourceforge.net/projects/mysql-python , (die Linux - Plattform kann zugegriffen werden: https://pypi.python.org/pypi/MySQL-python ) Von hier aus für Ihre Plattform wählen Installationspaket, vorkompiliert in Binärdateien und Quellcode-Paket.

Wenn Sie Binär-Release-Version wählen, fordert die Installation der Basisinstallation abzuschließen. Wenn aus dem Quellcode zu installieren, müssen Sie MySQLdb Release Top-Level-Verzeichnis zu wechseln, und geben Sie den folgenden Befehl ein:

$ 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

Hinweis: Stellen Sie sicher , dass Sie root - Rechte haben die oben beschriebenen Module zu installieren.


Database Connectivity

Bevor mit der Datenbank verbinden, stellen Sie sicher, dass die folgenden Elemente:

  • Sie haben eine Datenbank TESTDB erstellt.
  • In TESTDB Datenbank haben Sie die Tabelle EMPLOYEE erstellt
  • ARBEITNEHMERTabellenFeld FIRST_NAME, LAST_NAME, Alter, Geschlecht und Einkommen.
  • Benutzer stellen eine Verbindung zu der Datenbank unter Verwendung von TESTDB dem Namen "Testuser", Passwort "test123", können Sie Ihre eigene direkt oder Root-Benutzernamen und ein Passwort festlegen können, Mysql Datenbank Lizenz, benutzen Sie bitte den Befehl GRANT verwenden.
  • Auf Ihrem Computer installiert bereits Python-Modul MySQLdb.
  • Wenn Sie nicht vertraut mit der SQL - Anweisung sind, können Sie unsere besuchen SQL Tutorial Basis

Beispiel:

Die folgenden Beispiele für TESTDB Mysql Datenbank-Link:

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

Die Umsetzung des oben genannten Skript gibt die Ergebnisse sind wie folgt:

Database version : 5.0.45

Erstellen Sie eine Datenbank-Tabelle

Wenn die Datenbank-Verbindung vorhanden ist, können wir die Methode execute () verwenden, um Tabellen für die Datenbank zu erstellen, eine Tabelle EMPLOYEE erstellen im Folgenden dargestellt:

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

Datenbank einfügen

Im folgenden Beispiel wird eine SQL-Anweisung INSERT ausführen, um einen Datensatz in der Tabelle EMPLOYEE einzufügen:

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

Das obige Beispiel kann auch wie folgt geschrieben werden:

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

Beispiel:

Der folgende Code verwendet Variablen Parameter an eine SQL-Anweisung zu übergeben:

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

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

Datenbank-Abfragen

Python Mysql Abfrage mit fetchone () -Methode eine einzelne Daten zu erhalten, Verfahren unter Verwendung von fetchall () eine Vielzahl von Daten zu erhalten.

  • fetchone (): Diese Methode wird das nächste Abfrageergebnis.Die Ergebnismenge ist ein Ziel
  • fetchall (): gibt das Ergebnis alle Zeilen zu erhalten.
  • Rowcount: Dies ist ein Nur - Lese-Attribut, und gibt die Ausführung () -Methode nach der Anzahl der betroffenen Zeilen auszuführen.

Beispiel:

Entdecken Tabelle EMPLOYEE Gehalt (Lohn) Datenfeld ist größer als alle von 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()

Die obigen Skriptausführung Ergebnisse sind wie folgt:

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

Datenbank-Updates

Datenaktualisierungsvorgang für die Datentabelle zu aktualisieren, werden die folgenden Beispiele Tabelle SEX Feld, um alle Änderungen zu 'M', AGE Bereich von 1 testdb erhöht wird:

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

Löschung

Löschen Sie Daten löschen Daten für die Tabelle das folgende Beispiel zeigt, wie Daten in der Tabelle EMPLOYEE AGE löschen größer als 20 ist, alle Daten:

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

Executive-Angelegenheiten

Transaktionsmechanismus, um die Konsistenz der Daten zu gewährleisten.

Die Dienste sollten vier Eigenschaften haben: Unteilbarkeit, Konsistenz, Isolation, Dauerhaftigkeit. Diese vier Eigenschaften werden oft als ACID-Eigenschaften bezeichnet.

  • Atomic (Unteilbarkeit). Eine Transaktion ist eine unteilbare Einheit der Arbeit, solche Operationen in der Transaktion enthalten sind, entweder tun oder nicht tun.
  • Konsistenz (Konsistenz). Dienstleistungen müssen die Datenbank von einem konsistenten Zustand in einen anderen konsistenten Zustand zu machen geändert werden. Konsistenz und Unteilbarkeit sind eng miteinander verbunden.
  • Isolation (Isolation). Führen Sie eine Transaktion nicht andere Transaktionen Störungen sein können. Das ist eine Transaktions internen Betrieb und die Verwendung von anderen Datentransaktions concurrency isoliert ist und nicht miteinander interferieren zwischen einzelnen Transaktionen gleichzeitig ausgeführt werden.
  • Persistenz (Dauerhaftigkeit). Persistent auch permanent (Dauerhaftigkeit) genannt, bedeutet dies, dass, sobald eine Transaktion festgeschrieben, sollte seine Daten in der Datenbank ändern dauerhaft sein. Die folgenden Operationen oder der Unterlassung sollte keine Auswirkungen haben.

Python DB API 2.0 bietet zwei Methoden der Transaktion Commit oder Rollback.

Beispiel:

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

Für Transaktionsdatenbank, Datenbank-Programmierung in Python, wenn der Cursor festgelegt wird, beginnt automatisch eine Datenbanktransaktion unsichtbar.

commit () -Methode für alle Updates Cursor, Rollback () -Methode alle Vorgänge von der aktuellen Cursor-Rollback. Jede Methode hat ein neues Geschäft begonnen.


Fehlerbehandlung

DB-API einige Fehler und abnormale Betrieb der Datenbank definiert, listet die folgende Tabelle zeigt die Fehler und Ausnahmen:

abnormal Beschreibung
Warnung Wenn es eine ernste Warnung auszulösen, wie beispielsweise Einfügen von Daten abgeschnitten wird, und so weiter. Es muss eine Unterklasse von Standard sein.
Fehler Alle anderen Fehler anderer Klassen als Warnungen. Es muss eine Unterklasse von Standard sein.
InterfaceError Wird ausgelöst, wenn die Datenbank-Interface-Modul einen eigenen Fehler (statt eine Fehlerdatenbank) hat auftritt. Es muss eine Unterklasse von Fehler sein.
Database Trigger-und Datenbank-Fehlern. Es muss eine Unterklasse von Fehler sein.
Dataerror Wenn es trat ein Datenverarbeitungsfehler, wenn sie ausgelöst, zum Beispiel: Division durch Null-Fehler, die Daten außerhalb des Bereichs, und so weiter. Es muss eine Unterklasse von Database sein.
OperationalError Es bezieht sich auf eine nicht-benutzergesteuerten, aber der Fehler aufgetreten ist, während die Datenbank. Zum Beispiel: versehentlich getrennt wird, wird der Name der Datenbank nicht gefunden wird, schlägt die Transaktion, Speicherzuordnungsfehler usw. Operationen Datenbankfehler aufgetreten. Es muss eine Unterklasse von Database sein.
IntegrityError Integrität bezogene Fehler, wie eine Fremdschlüsselprüfung fehlschlägt und dergleichen. Es muss Databaseunterklasse sein.
InternalError Interner Datenbankfehler, wie beispielsweise ein Cursor (Cursor) ausfällt, die Ausfalltransaktionssynchronisation und so weiter. Es muss Databaseunterklasse sein.
ProgrammingError Verfahrensfehler, wie zum Beispiel Datentabelle (Tabelle) nicht gefunden oder bereits vorhanden ist, SQL-Anweisung Syntaxfehler, ein Fehler Anzahl von Parametern, und so weiter. Es muss eine Unterklasse von Database sein.
NotSupportedError Nicht unterstützt Fehler, bezieht sich auf die Verwendung von Funktionen wie beispielsweise API oder eine Datenbank nicht unterstützt. Zum Beispiel mit .rollback auf dem Verbindungsobjekt () Funktion, aber die Datenbank keine Transaktionen unterstützt oder Transaktion geschlossen wurde. Es muss eine Unterklasse von Database sein.