Latest web development tutorials

Połączenie z bazą danych MySQL Python3

W tym artykule przedstawiamy Python3 wykorzystanie PyMySQL połączyć się z bazą danych i prosty CRUD.

Czym jest PyMySQL?

PyMySQL dla połączenia z bazą danych serwera MySQL w wersji Python3.x, python2 w użyciu MySQLdb.

PyMySQL przestrzegać specyfikacji v2.0 Python Database API i zawiera biblioteki klienta MySQL-Python czystego.


instalacja PyMySQL

Przed użyciem PyMySQL, musimy zapewnić zainstalowany PyMySQL.

PyMySQL Pobieranie: https: //github.com/PyMySQL/PyMySQL.

Jeśli nie jest już zainstalowany, można użyć następującego polecenia, aby zainstalować najnowszą wersję PyMySQL:

$ pip install PyMySQL

Jeśli system nie obsługuje polecenia pip, można użyć zainstalowane następujące:

1, za pomocą polecenia git pobrać pakiet instalacyjny (można również pobrać ręcznie):

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

2, jeśli trzeba opracować numer wersji, można użyć polecenia curl zainstalować:

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

Uwaga: Upewnij się, że masz uprawnienia administratora do instalowania modułów opisanych powyżej.

Proces instalacji może pojawić się "ImportError: Nr moduł o nazwie setuptools" komunikat o błędzie, co oznacza, że nie ma potrzeby instalowania setuptools, można uzyskać dostęp https://pypi.python.org/pypi/setuptools znaleźć metodę instalacji każdego systemu.

Instalacja Linux Przykład:

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

Database Connectivity

Przed podłączeniem do bazy danych, upewnij się, że następujące elementy:

  • Został utworzony testdb bazy danych.
  • W bazie testdb utworzeniu pracownika stołowego
  • PRACOWNIK pole tabeli FIRST_NAME, LAST_NAME, wieku, płci i dochodów.
  • Użytkownicy łączą się z bazą danych za pomocą testdb nazwie "tester", hasło "test123", można ustawić własny bezpośrednio lub korzenia nazwę użytkownika i hasło użytkownika bazy danych MySQL licencji, użyj polecenia Grant.
  • Na komputerze zainstalowany moduł Pythona MySQLdb.
  • Jeśli nie są zaznajomieni z SQL, można odwiedzić naszą bazę SQL samouczek

Przykład:

Poniższe przykłady TESTDB Mysql łącza bazy danych:

#!/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()

Realizacja powyższego scenariusza wyprowadza wyniki przedstawiają się następująco:

Database version : 5.5.20-log

Tworzenie tabeli bazy danych

Jeśli istnieje połączenie z bazą danych, możemy użyć metody execute (), aby utworzyć tabele bazy danych, tworzyć pracownika tabeli pokazano w poniższym przykładzie:

#!/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()

wkładka Database

Poniższy przykład używa wykonać instrukcji INSERT, aby dodać rekord dla pracownika tabeli:

#!/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()

Powyższy przykład można także zapisać w następujący sposób:

#!/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()

Poniższy kod wykorzystuje zmienne przekazać parametry do instrukcji SQL:

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

zapytań do bazy danych

Pyton Mysql zapytania przy użyciu metody fetchone (), w celu uzyskania pojedynczych danych za pomocą fetchAll () w celu uzyskania wielu danych.

  • fetchone (): Ta metoda pobiera następny zestaw wyników kwerendy.Zestaw wyników jest celem
  • fetchAll () zwraca wynik, aby otrzymać wszystkie wiersze.
  • rowCount: Jest atrybutem tylko do odczytu i zwraca wykonanie wykonanie metody () po liczbie wierszy.

Przykład:

Odkryj PRACOWNIK Tabela wynagrodzeń (płac) Pole danych jest większa niż wszystkie 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()

Wyniki wykonania powyższego skryptu przedstawiają się następująco:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

aktualizacja baz danych

Dane aktualizujące operację dla aktualizowania tabeli danych, następujące przykłady testdb dziedzinie seks stolik wszystkie zmiany 'M', pola AGE jest zwiększany o 1:

#!/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()

usunięcie

Usuwanie danych usuwania danych dla tabeli, Poniższy przykład ilustruje usuwanie danych w dobie tabeli pracownik jest większa niż 20, wszystkie dane:

#!/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()

sprawy wykonawcze

Mechanizm transakcja w celu zapewnienia spójności danych.

Usługi powinny mieć cztery właściwości: niepodzielność, spójność, izolacja, trwałość. Te cztery właściwości są często określane jako właściwości kwasowych.

  • Atomic (niepodzielność). Transakcja jest niepodzielną jednostką pracy, takie działania są zawarte w transakcji albo zrobić lub nie zrobić.
  • Spójność (spójność). Usługi muszą być zmienione, aby baza danych z jednego spójnego stanu do innego stanu spójnego. Spójność i niepodzielność są ściśle powiązane.
  • Isolation (izolacja). Wykonanie transakcji nie może być innego zakłócenia czynności. To jest transakcja wewnętrzna działanie i wykorzystanie innych współbieżności transakcji dane są izolowane i nie może kolidować ze sobą między poszczególne transakcje wykonywać jednocześnie.
  • Trwałość (trwałość). Trwałe zwany także trwałe (trwałość), oznacza to, że po transakcji zobowiązuje się, zmienić swoje dane w bazie danych powinny być trwałe. Następujące inne operacje lub jego awaria nie powinna mieć żadnego wpływu.

Python DB API 2.0 udostępnia dwie metody commit lub rollback.

Przykłady

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

Na bazie transakcyjnej bazy danych, programowania w Pythonie, kiedy kursor ma siedzibę, automatycznie rozpoczyna transakcję bazy niewidoczny.

metodę commit () dla wszystkich metody aktualizacje kursora rollback (), aby cofnąć wszystkie operacje bieżącego kursora. Każda metoda rozpoczęła nową działalność.


Obsługa błędów

DB API definiuje pewne błędy i nieprawidłowe funkcjonowanie bazy danych, poniższa tabela zawiera błędy i wyjątki:

nienormalny opis
ostrzeżenie Gdy istnieje poważne ostrzeżenie wyzwalającym, takim jak wstawianie danych, jest obcinana, i tak dalej. To musi być podklasą StandardError.
błąd Wszystkie inne klasy błędach innych niż ostrzeżenia. To musi być podklasą StandardError.
InterfaceError Uruchamiany, gdy moduł interfejsu bazy danych ma swój własny błąd (zamiast bazy danych błędu) występuje. To musi być podklasą błąd.
Databaseerror Wyzwalanie i błędy bazy danych związane. To musi być podklasą błąd.
DataError Gdy nie ma wystąpił błąd przetwarzania danych, gdy uruchomiony, na przykład: dzielenie przez zero błąd, dane poza zakresem, i tak dalej. To musi być podklasą Databaseerror.
OperationalError To odnosi się do nie-kontrolowane przez użytkownika, ale wystąpił błąd podczas bazy danych. Na przykład: przypadkowo odłączony, nazwa bazy danych nie zostanie znaleziony, transakcja nie powiedzie się, błąd alokacji pamięci, itp wystąpił błąd bazy danych operacji. To musi być podklasą Databaseerror.
IntegrityError Błędy związane Integrity-, takie jak sprawdzenie klucza obcego nie powiedzie się i tym podobne. To musi być Databaseerror podklasy.
Internalerror Wewnętrzny błąd bazy danych, takie jak kursora (kursor) nie powiedzie się, synchronizacja transakcji awarii i tak dalej. To musi być Databaseerror podklasy.
ProgrammingError błędy proceduralne, takie jak tabeli danych (tabela) nie został znaleziony lub już istnieje, błąd składni SQL, numer błędu parametrów, i tak dalej. To musi być podklasą Databaseerror.
NotSupportedError Błąd nie jest obsługiwany, odnosi się do wykorzystania funkcji, takich jak API lub w bazie danych nie obsługuje. Na przykład za pomocą .rollback funkcję obiekt połączenia (), ale baza danych nie obsługuje transakcje lub transakcja została zamknięta. To musi być podklasą Databaseerror.