Latest web development tutorials

Operacje python bazy danych MySQL

Python standardowy interfejs bazy danych dla Pythona DB-API Python DB-API udostępnia interfejs programowania aplikacji bazy danych dla programistów.

Interfejs bazy danych Python obsługuje bardzo dużych baz danych, można wybrać projekt bazy danych:

  • giez
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • wyrocznia
  • Sybase

Możesz uzyskać dostęp do interfejsu bazy danych Pythona i API Zobacz szczegółową listę obsługiwanych baz danych.

Różnych baz danych Musisz pobrać inny moduł DB API, na przykład, trzeba uzyskać dostęp do baz danych Oracle i MySQL, należy pobrać moduł bazy danych MySQL i Oracle.

DB-API jest specyfikacją, która definiuje zbiór obiektów i bazy danych musi tryb dostępu, w celu zapewnienia spójnego interfejsu dostępu do różnorodnych bazowego systemu bazodanowego oraz rozmaite programu interfejsu bazy danych.

Pythona DB-API dla większości z bazy danych implementuje interfejs, używać po podłączeniu do bazy danych, można użyć ten sam sposób każde bazy danych.

Python DB-API przy użyciu procesu:

  • Wprowadzenie modułu interfejsu API.
  • Połącz się z bazą danych.
  • Execute SQL i procedur przechowywanych.
  • Zamknij połączenie z bazą danych.

Czym jest MySQLdb?

MySQLdb jest interfejsem dla Python mysql połączenia z bazą danych, które implementuje specyfikację Python Database API v2.0, w oparciu o ustanowieniu MySQL C API.


Jak zainstalować MySQLdb?

Aby pisać skrypty MySQL z DB-API, należy upewnić się, że masz zainstalowany MySQL. Skopiuj poniższy kod i go wykonać:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

Jeśli wyjście jest następujący po wykonaniu, co oznacza, że ​​nie mają modułu MySQLdb jest zainstalowany:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

Zainstaluj MySQLdb, odwiedź http://sourceforge.net/projects/mysql-python (platforma Linux można uzyskać: https://pypi.python.org/pypi/MySQL-python ) Stąd wybrać dla swojej platformy pakiet instalacyjny, pre-kompilowane do plików binarnych i pakiet kodu źródłowego.

W przypadku wybrania opcji binarnej wersji systemu, instalator poprosi, aby zakończyć instalację podstawową. W przypadku instalacji z kodu źródłowego, należy przejść do katalogu MySQLdb uwalnianie najwyższego poziomu, a następnie wpisz następujące polecenie:

$ 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

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


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

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

Database version : 5.0.45

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

wkładka Database

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

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

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

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

Przykład:

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

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

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

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ład:

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