Python - MySQL-Datenbankzugriff
Vorherige SeiteNächste Seite
Der Python-Standard für Datenbankschnittstellen ist die Python DB-API. Die meisten Python-Datenbankschnittstellen halten sich an diesen Standard.
Sie können die richtige Datenbank für Ihre Anwendung auswählen. Die Python-Datenbank-API unterstützt eine breite Palette von Datenbankservern wie −
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Orakel
- Sybase
Hier ist die Liste der verfügbaren Python-Datenbankschnittstellen:Python-Datenbankschnittstellen und -APIs. Sie müssen für jede Datenbank, auf die Sie zugreifen müssen, ein separates DB-API-Modul herunterladen. Wenn Sie beispielsweise sowohl auf eine Oracle-Datenbank als auch auf eine MySQL-Datenbank zugreifen müssen, müssen Sie sowohl das Oracle- als auch das MySQL-Datenbankmodul herunterladen.
Die DB-API bietet einen Mindeststandard für die Arbeit mit Datenbanken unter Verwendung von Python-Strukturen und -Syntax, wo immer dies möglich ist. Diese API enthält Folgendes:−
- Importieren des API-Moduls.
- Aufbau einer Verbindung mit der Datenbank.
- Ausgeben von SQL-Anweisungen und gespeicherten Prozeduren.
- Schließen der Verbindung
Wir würden alle Konzepte mit MySQL lernen, also lassen Sie uns über das MySQLdb-Modul sprechen.
Was ist MySQLdb?
MySQLdb ist eine Schnittstelle zum Herstellen einer Verbindung zu einem MySQL-Datenbankserver von Python aus. Es implementiert die Python-Datenbank-API v2.0 und baut auf der MySQL-C-API auf.
Wie installiere ich MySQLdb?
Bevor Sie fortfahren, stellen Sie sicher, dass MySQLdb auf Ihrem Computer installiert ist. Geben Sie einfach Folgendes in Ihr Python-Skript ein und führen Sie es aus −
#!/usr/bin/python import MySQLdb
Wenn es das folgende Ergebnis erzeugt, bedeutet dies, dass das MySQLdb-Modul nicht installiert ist −
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb
Um das MySQLdb-Modul zu installieren, verwenden Sie den folgenden Befehl −
For Ubuntu, use the following command - $ sudo apt-get install python-pip python-dev libmysqlclient-dev For Fedora, use the following command - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc For Python command prompt, use the following command - pip install MySQL-python
Hinweis − Stellen Sie sicher, dass Sie Root-Rechte haben, um das obige Modul zu installieren.
Datenbankverbindung
Stellen Sie Folgendes sicher, bevor Sie sich mit einer MySQL-Datenbank verbinden −
-
Sie haben eine Datenbank TESTDB erstellt.
-
Sie haben eine Tabelle EMPLOYEE in TESTDB erstellt.
-
Diese Tabelle enthält die Felder VORNAME, NACHNAME, ALTER, GESCHLECHT und EINKOMMEN.
-
Die Benutzer-ID „testuser“ und das Passwort „test123“ sind für den Zugriff auf TESTDB festgelegt.
-
Das Python-Modul MySQLdb ist ordnungsgemäß auf Ihrem Computer installiert.
-
Sie haben das MySQL-Tutorial durchlaufen, um die MySQL-Grundlagen zu verstehen.
Beispiel
Im Folgenden sehen Sie ein Beispiel für die Verbindung mit der MySQL-Datenbank „TESTDB“
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("SELECT VERSION()") # Fetch a single row using fetchone() method. data = cursor.fetchone() print "Database version : %s " % data # disconnect from server db.close()
Während dieses Skript ausgeführt wird, erzeugt es auf meinem Linux-Rechner das folgende Ergebnis.
Database version : 5.0.45
Wenn eine Verbindung mit der Datenquelle hergestellt wird, wird ein Verbindungsobjekt zurückgegeben und in db gespeichert zur weiteren Verwendung, sonst db ist auf Keine eingestellt. Als nächstes db -Objekt wird verwendet, um einen Cursor zu erstellen -Objekt, das wiederum zur Ausführung von SQL-Abfragen verwendet wird. Schließlich, bevor es herauskommt, stellt es sicher, dass die Datenbankverbindung geschlossen und Ressourcen freigegeben werden.
Datenbanktabelle erstellen
Sobald eine Datenbankverbindung hergestellt ist, können wir mit execute Tabellen oder Datensätze in den Datenbanktabellen erstellen Methode des erstellten Cursors.
Beispiel
Lassen Sie uns die Datenbanktabelle EMPLOYEE −
erstellen#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Drop table if it already exist using execute() method. cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # Create table as per requirement sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # disconnect from server db.close()
INSERT-Operation
Es ist erforderlich, wenn Sie Ihre Datensätze in einer Datenbanktabelle erstellen möchten.
Beispiel
Das folgende Beispiel führt SQL INSERT aus Anweisung zum Erstellen eines Datensatzes in der EMPLOYEE-Tabelle −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()
Das obige Beispiel kann wie folgt geschrieben werden, um SQL-Abfragen dynamisch zu erstellen −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ ('Mac', 'Mohan', 20, 'M', 2000) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()
Beispiel
Das folgende Codesegment ist eine weitere Form der Ausführung, bei der Sie Parameter direkt übergeben können −
.................................. user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) ..................................
READ-Vorgang
READ-Operation auf einer beliebigen Datenbank bedeutet, einige nützliche Informationen aus der Datenbank abzurufen.
Sobald unsere Datenbankverbindung hergestellt ist, können Sie eine Abfrage in dieser Datenbank durchführen. Sie können entweder fetchone() verwenden Methode zum Abrufen eines einzelnen Datensatzes oder fetchall() Methode, um mehrere Werte aus einer Datenbanktabelle abzurufen.
-
fetchone() − Es holt die nächste Zeile einer Abfrageergebnismenge. Eine Ergebnismenge ist ein Objekt, das zurückgegeben wird, wenn ein Cursorobjekt zum Abfragen einer Tabelle verwendet wird.
-
fetchall() − Es ruft alle Zeilen in einer Ergebnismenge ab. Wenn einige Zeilen bereits aus der Ergebnismenge extrahiert wurden, werden die verbleibenden Zeilen aus der Ergebnismenge abgerufen.
-
Zeilenzahl − Dies ist ein schreibgeschütztes Attribut und gibt die Anzahl der Zeilen zurück, die von einer execute()-Methode betroffen waren.
Beispiel
Das folgende Verfahren fragt alle Datensätze aus der Tabelle EMPLOYEE mit einem Gehalt von mehr als 1000 −
ab#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() sql = "SELECT * FROM EMPLOYEE \ WHERE INCOME > '%d'" % (1000) try: # Execute the SQL command cursor.execute(sql) # Fetch all the rows in a list of lists. results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # Now print fetched result print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except: print "Error: unable to fecth data" # disconnect from server db.close()
Dies wird das folgende Ergebnis erzeugen −
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Aktualisierungsvorgang
UPDATE-Operation auf einer beliebigen Datenbank bedeutet, einen oder mehrere Datensätze zu aktualisieren, die bereits in der Datenbank verfügbar sind.
Das folgende Verfahren aktualisiert alle Datensätze mit SEX als 'M' . Hier erhöhen wir das ALTER aller Männer um ein Jahr.
Beispiel
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to UPDATE required records sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()
DELETE-Vorgang
Der DELETE-Vorgang ist erforderlich, wenn Sie einige Datensätze aus Ihrer Datenbank löschen möchten. Im Folgenden ist das Verfahren zum Löschen aller Datensätze von EMPLOYEE beschrieben, bei denen das ALTER über 20 liegt −
Beispiel
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to DELETE required records sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()
Durchführung von Transaktionen
Transaktionen sind ein Mechanismus, der die Datenkonsistenz sicherstellt. Transaktionen haben die folgenden vier Eigenschaften −
-
Atomizität − Entweder wird eine Transaktion abgeschlossen oder es passiert überhaupt nichts.
-
Konsistenz − Eine Transaktion muss in einem konsistenten Zustand beginnen und das System in einem konsistenten Zustand verlassen.
-
Isolierung − Zwischenergebnisse einer Transaktion sind außerhalb der aktuellen Transaktion nicht sichtbar.
-
Haltbarkeit − Sobald eine Transaktion festgeschrieben wurde, bleiben die Auswirkungen auch nach einem Systemausfall bestehen.
Die Python DB API 2.0 bietet zwei Methoden zum commit oder Zurücksetzen eine Transaktion.
Beispiel
Sie wissen bereits, wie Sie Transaktionen implementieren. Hier ist wieder ein ähnliches Beispiel −
# Prepare SQL query to DELETE required records sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback()
COMMIT-Vorgang
Commit ist die Operation, die der Datenbank ein grünes Signal gibt, um die Änderungen abzuschließen, und nach dieser Operation kann keine Änderung rückgängig gemacht werden.
Hier ist ein einfaches Beispiel für den Aufruf von commit Methode.
db.commit()
ROLLBACK-Vorgang
Wenn Sie mit einer oder mehreren Änderungen nicht zufrieden sind und diese Änderungen vollständig rückgängig machen möchten, verwenden Sie rollback() Methode.
Hier ist ein einfaches Beispiel für den Aufruf von rollback() Methode.
db.rollback()
Datenbank wird getrennt
Um die Datenbankverbindung zu trennen, verwenden Sie die Methode close().
db.close()
Wenn die Verbindung zu einer Datenbank vom Benutzer mit der Methode close() geschlossen wird, werden alle ausstehenden Transaktionen von der DB zurückgesetzt. Anstatt sich jedoch auf Implementierungsdetails auf niedrigerer DB-Ebene zu verlassen, wäre es für Ihre Anwendung besser, explizit Commit oder Rollback aufzurufen.
Behandlung von Fehlern
Es gibt viele Fehlerquellen. Einige Beispiele sind ein Syntaxfehler in einer ausgeführten SQL-Anweisung, ein Verbindungsfehler oder das Aufrufen der Fetch-Methode für ein bereits abgebrochenes oder abgeschlossenes Anweisungs-Handle.
Die DB-API definiert eine Reihe von Fehlern, die in jedem Datenbankmodul vorhanden sein müssen. Die folgende Tabelle listet diese Ausnahmen auf.
Sr.No. | Ausnahme &Beschreibung |
---|---|
1 | Warnung Wird für nicht schwerwiegende Probleme verwendet. Muss StandardError ableiten. |
2 | Fehler Basisklasse für Fehler. Muss StandardError ableiten. |
3 | Schnittstellenfehler Wird für Fehler im Datenbankmodul verwendet, nicht in der Datenbank selbst. Muss Fehler ableiten. |
4 | Datenbankfehler Wird für Fehler in der Datenbank verwendet. Muss Fehler ableiten. |
5 | Datenfehler Unterklasse von DatabaseError, die auf Fehler in den Daten verweist. |
6 | Betriebsfehler Unterklasse von DatabaseError, die sich auf Fehler wie den Verlust einer Verbindung zur Datenbank bezieht. Diese Fehler liegen im Allgemeinen außerhalb der Kontrolle des Python-Scripters. |
7 | Integritätsfehler Unterklasse von DatabaseError für Situationen, die die relationale Integrität beschädigen würden, wie Eindeutigkeitseinschränkungen oder Fremdschlüssel. |
8 | Interner Fehler Unterklasse von DatabaseError, die sich auf interne Fehler des Datenbankmoduls bezieht, z. B. wenn ein Cursor nicht mehr aktiv ist. |
9 | Programmierungsfehler Unterklasse von DatabaseError, die sich auf Fehler bezieht, wie z. B. einen ungültigen Tabellennamen und andere Dinge, die Ihnen getrost angelastet werden können. |
10 | NotSupportedError Unterklasse von DatabaseError, die sich auf den Versuch bezieht, nicht unterstützte Funktionen aufzurufen. |
Ihre Python-Skripte sollten diese Fehler behandeln, aber bevor Sie eine der oben genannten Ausnahmen verwenden, stellen Sie sicher, dass Ihre MySQLdb diese Ausnahme unterstützt. Sie können weitere Informationen darüber erhalten, indem Sie die DB API 2.0-Spezifikation lesen.
Python