Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

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 −

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:−

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 −

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.

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 −

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

  1. Python-Datentypen
  2. Python-Operatoren
  3. Python-pass-Anweisung
  4. Python-Funktionsargumente
  5. Python-Wörterbuch
  6. Python-Iteratoren
  7. Python-Schließungen
  8. Python-Datetime
  9. Python-Schlaf()
  10. Python – Übersicht