Latest web development tutorials

Python3 MySQL Datenbank-Verbindung

In diesem Beitrag stellen wir Python3 Verwendung PyMySQL mit der Datenbank verbinden und einfache CRUD.

Was ist PyMySQL?

PyMySQL für eine Datenbankverbindung MySQL-Server-Version in Python3.x, Python2 im Einsatz mysqldb.

PyMySQL folgen Spezifikation v2.0 Python Database API und enthält pure-Python MySQL-Client-Bibliothek.


PyMySQL Installation

Vor der Verwendung von PyMySQL, müssen wir PyMySQL installiert zu gewährleisten.

PyMySQL Download: https: //github.com/PyMySQL/PyMySQL.

Wenn nicht bereits installiert haben, können wir den folgenden Befehl verwenden, um die neueste Version von PyMySQL zu installieren:

$ pip install PyMySQL

Wenn Ihr System nicht pip Befehl nicht unterstützt, können Sie mit den folgenden Optionen:

1, die git-Befehl mit dem Installationspaket (Sie können auch manuell herunterladen können) zum Download:

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2, wenn Sie eine Versionsnummer zu entwickeln, dann können Sie die curl Befehl zu installieren verwenden:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

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

Der Installationsprozess kann "Import: Kein Modul mit dem Namen Setuptools" erscheinen Fehlermeldung, das heißt , Sie müssen nicht Setuptools installiert haben , können Sie Zugriff auf https://pypi.python.org/pypi/setuptools die Installationsmethode jedes System.

Linux-Installation Beispiel:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

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/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 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.5.20-log

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/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3

import pymysql

# 打开数据库连接
db = pymysql.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:
   # 如果发生错误则回滚
   db.rollback()

# 关闭数据库连接
db.close()

Das obige Beispiel kann auch wie folgt geschrieben werden:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.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)
   # 执行sql语句
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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.

Beispiele

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