Pythons Standard-Datenbankschnittstelle ist die Python DB-API, die Entwicklern eine Programmierschnittstelle für Datenbankanwendungen bietet.
Die Python-Datenbankschnittstelle unterstützt viele Datenbanken. Sie können die Datenbank auswählen, die zu Ihrem Projekt passt:
GadFly
mSQL
MySQL
PostgreSQL
Microsoft SQL Server 2000
Informix
Interbase
Oracle
Sybase
Sie können darauf zugreifen Python-Datenbankschnittstellen und APIs Sehen Sie sich die detaillierte Liste der unterstützten Datenbanken an.
Sie müssen verschiedene DB-API-Module für verschiedene Datenbanken herunterladen. Wenn Sie beispielsweise auf Oracle-Datenbank- und MySQL-Daten zugreifen müssen, müssen Sie Oracle- und MySQL-Datenbankmodule herunterladen.
DB-API ist eine Spezifikation. Sie definiert eine Reihe notwendiger Objekte und Datenbankzugriffsmethoden, um konsistente Zugriffsschnittstellen für verschiedene zugrunde liegende Datenbanksysteme und verschiedene Datenbankschnittstellenprogramme bereitzustellen.
Die DB-API von Python implementiert Schnittstellen für die meisten Datenbanken. Nachdem Sie sie zum Herstellen einer Verbindung zu jeder Datenbank verwendet haben, können Sie jede Datenbank auf die gleiche Weise bedienen.
Python DB-API-Nutzungsprozess:
Einführung des API-Moduls.
Stellen Sie die Verbindung zur Datenbank her.
SQL-Anweisungen und gespeicherte Prozeduren ausführen.
Schließen Sie die Datenbankverbindung.
Was ist MySQLdb?
MySQLdb ist eine Schnittstelle für Python zur Verbindung mit der MySQL-Datenbank. Sie implementiert die Python-Datenbank-API-Spezifikation V2.0 und basiert auf der MySQL-C-API.
Wie installiere ich MySQLdb?
Um MySQL-Skripte mit der DB-API zu schreiben, müssen Sie sicherstellen, dass MySQL installiert ist. Kopieren Sie den folgenden Code und führen Sie ihn aus:
#!/usr/bin/python
import MySQLdb
Wenn die Ausgabe nach der Ausführung wie folgt lautet, bedeutet dies, dass Sie das MySQLdb-Modul nicht installiert haben:
Traceback (letzter Aufruf zuletzt):
Datei „test.py“, Zeile 3, in
MySQLdb importieren
ImportError: Kein Modul benannt MySQLdb
Um MySQLdb zu installieren, besuchen Sie bitte http://sourceforge.net/projects/mysql-python. Von hier aus können Sie das für Sie geeignete Installationspaket auswählen Plattform. Installieren Sie Pakete für vorkompilierte Binärdateien und Quellcode.
Wenn Sie die Binärdateiverteilungsversion wählen, kann der Installationsvorgang mit grundlegenden Installationsaufforderungen abgeschlossen werden. Wenn Sie von der Quelle installieren, müssen Sie in das oberste Verzeichnis der MySQLdb-Distribution wechseln und den folgenden Befehl eingeben:
$ 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: Bitte stellen Sie sicher, dass Sie Root-Rechte haben, um die oben genannten Module zu installieren.
Datenbankverbindung
Bevor Sie eine Verbindung zur Datenbank herstellen, bestätigen Sie bitte Folgendes:
Sie haben die Datenbank TESTDB erstellt.
In der TESTDB-Datenbank sind Sie erstellt haben. Die Felder der Tabelle EMPLOYEE
EMPLOYEE sind VORNAME, NACHNAME, ALTER, GESCHLECHT und EINKOMMEN.
Der Benutzername, der für die Verbindung zur Datenbank TESTDB verwendet wird, ist „testuser“ und das Passwort ist „test123“. Sie können es selbst festlegen oder direkt den Root-Benutzernamen und das Passwort verwenden. Für die Benutzerautorisierung der MySQL-Datenbank verwenden Sie bitte den Grant-Befehl.
Das Python MySQLdb-Modul ist bereits auf Ihrem Computer installiert.
Wenn Sie mit SQL-Anweisungen nicht vertraut sind, können Sie unser grundlegendes SQL-Tutorial besuchen
Beispiele:
Die folgenden Beispiele verweisen auf die TESTDB-Datenbank von MySQL:
#!/usr/bin/python
MySQLdb importieren
# Datenbank öffnen Verbindung
db = MySQLdb.connect("localhost","testuser","test123","TESTDB")
# Verwenden Sie zum Abrufen die Cursor()-Methode der Operationscursor
cursor = db.cursor()
# Verwenden Sie die Ausführungsmethode, um SQL-Anweisungen auszuführen
cursor.execute("SELECT VERSION ()")
# Verwenden Sie die Methode fetchone(), um eine Datenbank abzurufen.
data = Cursor.fetchone()
print "Datenbankversion: %s " % Daten
# Schließen Sie die Datenbank verbinden
db.close()
Führen Sie das obige Skript aus und das Ausgabeergebnis ist wie folgt:
Datenbankversion: 5.0.45
Datenbanktabelle erstellen
Wenn die Datenbankverbindung besteht, melden wir uns Sie können die Methodeexecute() verwenden. Erstellen Sie eine Tabelle für die Datenbank und erstellen Sie die Tabelle EMPLOYEE wie folgt:
#!/usr/bin/python
MySQLdb importieren
# Datenbankverbindung öffnen
db = MySQLdb.connect("localhost","testuser","test123", "TESTDB")
# Verwenden Sie die Cursor()-Methode, um den Operationscursor zu erhalten
cursor = db.cursor()
# Wenn die Datentabelle bereits vorhanden ist, löscht die Methode „execute()“ die Tabelle.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# Datentabelle erstellen SQL-Anweisung
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
NACHNAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# Datenbankverbindung schließen
db.close ()
Datenbankeinfügungsvorgang
Das folgende Beispiel verwendet die SQL-Anweisung INSERT, um Datensätze in die Tabelle EMPLOYEE einzufügen:
#!/usr/bin/python
MySQLdb importieren
# Datenbank öffnen Verbindung
db = MySQLdb.connect("localhost","testuser","test123","TESTDB")
# Verwenden Sie zum Abrufen die Cursor()-Methode der Operationscursor
cursor = db.cursor()
# SQL-Einfügeanweisung
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
NACHNAME, ALTER, GESCHLECHT, EINKOMMEN)
WERTE ('Mac', 'Mohan', 20, 'M', 2000)""
versuchen Sie:
# SQL-Anweisung ausführen
Cursor.execute(sql)
# Zur Ausführung an die Datenbank senden
db.commit()
außer :
# Rollback im Fehlerfall
db.rollback()
# Datenbankverbindung schließen
db .close()
Das obige Beispiel kann auch in der folgenden Form geschrieben werden:
#!/usr/bin/python
MySQLdb importieren
# Datenbankverbindung öffnen
db = MySQLdb. connect("localhost","testuser","test123 ","TESTDB" )
# Verwenden Sie die Cursor()-Methode, um den Operationscursor
cursor = zu erhalten db.cursor()
# SQL-Einfügeanweisung
sql = "INSERT INTO EMPLOYEE(FIRST_NAME,
NACHNAME, ALTER, GESCHLECHT, EINKOMMEN)
VALUES ('%s', '% s', '%d', '%c', '%d' )" %
('Mac', 'Mohan', 20, 'M', 2000)
versuchen Sie:
# SQL-Anweisung ausführen
Cursor.execute(sql)
# Zur Ausführung an die Datenbank senden
db.commit()
außer:
# Rollback, wenn ein Fehler auftritt
db.rollback()
# Datenbankverbindung schließen
db. close()
Beispiel:
Der folgende Code verwendet Variablen zur Übergabe von Parametern an die SQL-Anweisung:
....................... ......
user_id = "test123"
password = "password"
con.execute('insert into Login-Werte( "%s", "%s")' %
(Benutzer-ID, Passwort))
.................. .........
Datenbankabfragevorgang
Python fragt MySQL mithilfe der fetchone()-Methode ab, um ein einzelnes Stück zu erhalten von Daten und die fetchall()-Methode zum Abrufen mehrerer Datenelemente.
fetchone(): Diese Methode ruft den nächsten Abfrageergebnissatz ab. Die Ergebnismenge ist ein Objekt
fetchall(): empfängt alle zurückgegebenen Ergebniszeilen
rowcount: Dies ist ein schreibgeschütztes Attribut und gibt die Anzahl der betroffenen Zeilen nach der Ausführung vonexecute( zurück. ) Methode.
Beispiel:
Fragen Sie alle Daten in der EMPLOYEE-Tabelle ab, deren Gehaltsfeld größer als 1000 ist:
#!/ usr/bin/python
MySQLdb importieren
# Datenbankverbindung öffnen
db = MySQLdb.connect("localhost" ,"testuser","test123","TESTDB" )
# Verwenden Sie die Cursor()-Methode, um den Operationscursor zu erhalten
cursor = db.cursor()
# SQL-Abfrageanweisung
sql = "SELECT * FROM EMPLOYEE
WHERE INCOME > '%d'" % (1000)
try:
# SQL-Anweisung ausführen
Cursor.execute(sql)
# Liste aller Datensätze abrufen
results = Cursor.fetchall()
für Zeile in Ergebnissen:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
Einkommen = row[4]
# Drucken Sie das Ergebnis
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" %
(fname, lname, age, Geschlecht, Einkommen )
außer:
print „Fehler: Daten konnten nicht abgerufen werden“
# Datenbankverbindung schließen
db .close( )
Das Ausführungsergebnis des obigen Skripts ist wie folgt:
fname=Mac, lname=Mohan, Alter=20, Geschlecht=M, Einkommen=2000
Datenbankaktualisierungsvorgang
Der Aktualisierungsvorgang wird verwendet, um die Daten in der Datentabelle zu aktualisieren. Das folgende Beispiel ändert alle SEX-Felder in der TESTDB-Tabelle in „M“ und erhöht das AGE-Feld um 1:
#!/usr/bin/python
MySQLdb importieren
# Datenbankverbindung öffnen
db = MySQLdb.connect("localhost","testuser","test123" ,"TESTDB" )
# Verwenden Sie die Cursor()-Methode, um den Operationscursor
abzurufen Cursor = db.cursor()
#SQL-Update-Anweisung
SQL = "UPDATE EMPLOYEE SET AGE = Age 1
Where Sex = '% C'"%('M')
Versuchen Sie:
# SQL-Anweisung ausführen
Cursor.execute(sql)
# An Datenbank senden für Ausführung
db.commit()
außer :
# Rollback, wenn ein Fehler auftritt
db.rollback()
# Datenbankverbindung schließen
db.close( )
Transaktionen ausführen
Der Transaktionsmechanismus kann die Datenkonsistenz sicherstellen.
Transaktionen sollten 4 Attribute haben: Atomizität, Konsistenz, Isolation und Haltbarkeit. Diese vier Eigenschaften werden oft als ACID-Eigenschaften bezeichnet.
Atomizität. Eine Transaktion ist eine unteilbare Arbeitseinheit. Alle in der Transaktion enthaltenen Vorgänge werden entweder ausgeführt oder keine davon.
Konsistenz. Eine Transaktion muss die Datenbank von einem Konsistenzzustand in einen anderen ändern. Konsistenz und Atomizität hängen eng zusammen.
Isolation. Die Ausführung einer Transaktion kann nicht durch andere Transaktionen beeinträchtigt werden. Das heißt, die innerhalb einer Transaktion verwendeten Vorgänge und Daten sind von anderen gleichzeitigen Transaktionen isoliert und gleichzeitig ausgeführte Transaktionen können sich nicht gegenseitig stören.
Haltbarkeit. Kontinuität, auch Permanenz genannt, bedeutet, dass die Änderungen an den Daten in der Datenbank dauerhaft sein sollten, sobald eine Transaktion festgeschrieben wurde. Nachfolgende Operationen oder Ausfälle sollten keine Auswirkungen darauf haben.
Python DB API 2.0-Transaktionen bieten zwei Methoden zum Festschreiben oder Zurücksetzen.
Beispiel:
# SQL-Anweisung zum Löschen von Datensätzen
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d '" % (20)
versuchen Sie:
#SQL-Anweisung ausführen
Cursor.execute(sql)
#An die Datenbank senden
db.commit()
außer:
# Rollback, wenn ein Fehler auftritt
db.rollback()
Bei Datenbanken, die Transaktionen unterstützen, wird bei der Python-Datenbankprogrammierung beim Erstellen des Cursors automatisch eine unsichtbare Datenbanktransaktion gestartet.
Die commit()-Methode führt alle Aktualisierungsvorgänge am Cursor aus und die rollback()-Methode setzt alle Vorgänge am aktuellen Cursor zurück. Jede Methode startet eine neue Transaktion.
Fehlerbehandlung
DB-API definiert einige Fehler und Ausnahmen für Datenbankoperationen. Die folgende Tabelle listet diese Fehler und Ausnahmen auf:
Ausnahme
Beschreibung
Eine Warnung wird ausgelöst, wenn eine schwerwiegende Warnung vorliegt, z. B. wenn die eingegebenen Daten abgeschnitten werden usw. Muss eine Unterklasse von StandardError sein.
Fehler Alle anderen Fehlertypen außer Warnungen. Muss eine Unterklasse von StandardError sein.
InterfaceError Wird ausgelöst, wenn ein Fehler im Datenbankschnittstellenmodul selbst auftritt (kein Fehler in der Datenbank). Muss eine Unterklasse von Error sein.
DatabaseError Wird ausgelöst, wenn ein Fehler im Zusammenhang mit der Datenbank auftritt. Muss eine Unterklasse von Error sein.
DataError Wird ausgelöst, wenn während der Datenverarbeitung ein Fehler auftritt, z. B. ein Fehler bei der Division durch Null, Daten außerhalb des zulässigen Bereichs usw. Muss eine Unterklasse von DatabaseError sein.
OperationalError bezieht sich auf Fehler, die nicht vom Benutzer kontrolliert werden, aber beim Betrieb der Datenbank auftreten. Beispiele: Die Verbindung wird unerwartet getrennt, der Datenbankname wird nicht gefunden, die Transaktionsverarbeitung schlägt fehl, Speicherzuordnungsfehler usw. sind Fehler, die beim Betrieb der Datenbank auftreten. Muss eine Unterklasse von DatabaseError sein.
IntegrityError Integritätsbezogene Fehler, wie z. B. ein Fehler bei der Fremdschlüsselprüfung usw. Muss eine DatabaseError-Unterklasse sein.
InternalError Interner Fehler der Datenbank, z. B. Cursorfehler, Transaktionssynchronisierungsfehler usw. Muss eine DatabaseError-Unterklasse sein.
ProgrammingError Programmierfehler, z. B. Datentabelle nicht gefunden oder bereits vorhanden, Syntaxfehler der SQL-Anweisung, falsche Anzahl von Parametern usw. Muss eine Unterklasse von DatabaseError sein.
NotSupportedError Der Fehler „Nicht unterstützt“ bezieht sich auf die Verwendung von Funktionen oder APIs, die von der Datenbank nicht unterstützt werden. Beispielsweise wird die Funktion .rollback() für das Verbindungsobjekt verwendet, die Datenbank unterstützt jedoch keine Transaktionen oder die Transaktion wurde geschlossen. Muss eine Unterklasse von DatabaseError sein.