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