Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Python — доступ к базе данных MySQL

Предыдущая страницаСледующая страница

Стандартом Python для интерфейсов баз данных является Python DB-API. Большинство интерфейсов баз данных Python соответствуют этому стандарту.

Вы можете выбрать подходящую базу данных для своего приложения. API базы данных Python поддерживает широкий спектр серверов баз данных, таких как -

Вот список доступных интерфейсов баз данных Python:Интерфейсы баз данных Python и API. Вы должны загрузить отдельный модуль DB API для каждой базы данных, к которой вам нужен доступ. Например, если вам необходимо получить доступ как к базе данных Oracle, так и к базе данных MySQL, вы должны загрузить модули базы данных Oracle и MySQL.

DB API обеспечивает минимальный стандарт для работы с базами данных с использованием структур и синтаксиса Python, где это возможно. Этот API включает в себя следующее —

Мы изучим все концепции, используя MySQL, поэтому давайте поговорим о модуле MySQLdb.

Что такое MySQLdb?

MySQLdb — это интерфейс для подключения к серверу базы данных MySQL из Python. Он реализует Python Database API версии 2.0 и построен на основе MySQL C API.

Как установить MySQLdb?

Прежде чем продолжить, убедитесь, что на вашем компьютере установлена ​​MySQLdb. Просто введите следующее в свой скрипт Python и выполните его —

#!/usr/bin/python

import MySQLdb

Если он выдает следующий результат, это означает, что модуль MySQLdb не установлен —

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

Чтобы установить модуль MySQLdb, используйте следующую команду –

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

Примечание − Убедитесь, что у вас есть привилегии root для установки вышеуказанного модуля.

Подключение к базе данных

Перед подключением к базе данных MySQL убедитесь в следующем —

Пример

Ниже приведен пример подключения к базе данных MySQL "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()

При запуске этого сценария на моей машине с Linux он дает следующий результат.

Database version : 5.0.45

Если соединение с источником данных установлено, объект соединения возвращается и сохраняется в db. для дальнейшего использования, иначе db установлено значение «Нет». Далее дб объект используется для создания курсора объект, который, в свою очередь, используется для выполнения SQL-запросов. Наконец, прежде чем выйти, он гарантирует, что соединение с базой данных закрыто и ресурсы освобождены.

Создание таблицы базы данных

Как только соединение с базой данных установлено, мы готовы создавать таблицы или записи в таблицах базы данных с помощью execute. метод созданного курсора.

Пример

Давайте создадим таблицу базы данных EMPLOYEE —

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

Операция ВСТАВИТЬ

Это необходимо, когда вы хотите создать свои записи в таблице базы данных.

Пример

В следующем примере выполняется SQL INSERT. оператор для создания записи в таблице EMPLOYEE —

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

Вышеприведенный пример можно записать следующим образом для динамического создания SQL-запросов —

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

Пример

Следующий сегмент кода — это еще одна форма выполнения, в которой вы можете напрямую передавать параметры —

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

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

Операция ЧТЕНИЕ

Операция READ для любой базы данных означает получение некоторой полезной информации из базы данных.

Как только соединение с нашей базой данных установлено, вы готовы сделать запрос в эту базу данных. Вы можете использовать либо fetchone() метод получения одной записи или fetchall() метод для извлечения нескольких значений из таблицы базы данных.

Пример

Следующая процедура запрашивает все записи из таблицы EMPLOYEE с зарплатой более 1000 —

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

Это даст следующий результат —

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

Операция обновления

ОБНОВЛЕНИЕ Операция над любой базой данных означает обновление одной или нескольких записей, которые уже имеются в базе данных.

Следующая процедура обновляет все записи, содержащие SEX как 'M'. . Здесь мы увеличиваем ВОЗРАСТ всех мужчин на один год.

Пример

#!/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 требуется, когда вы хотите удалить некоторые записи из вашей базы данных. Ниже приведена процедура удаления всех записей из EMPLOYEE, где ВОЗРАСТ больше 20 –

Пример

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

Выполнение транзакций

Транзакции — это механизм, обеспечивающий согласованность данных. Транзакции имеют следующие четыре свойства —

Python DB API 2.0 предоставляет два метода для фиксации или откатить транзакция.

Пример

Вы уже знаете, как реализовать транзакции. Вот снова аналогичный пример —

# 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

Фиксация — это операция, которая дает зеленый сигнал базе данных для завершения изменений, и после этой операции никакие изменения не могут быть возвращены обратно.

Вот простой пример вызова commit метод.

db.commit()

Операция ROLLBACK

Если вы не удовлетворены одним или несколькими изменениями и хотите полностью отменить эти изменения, используйте rollback() метод.

Вот простой пример вызова rollback(). метод.

db.rollback()

Отключение базы данных

Чтобы отключить соединение с базой данных, используйте метод close().

db.close()

Если соединение с базой данных закрывается пользователем с помощью метода close(), все незавершенные транзакции откатываются БД. Однако вместо того, чтобы зависеть от каких-либо деталей реализации более низкого уровня БД, вашему приложению было бы лучше явно вызвать фиксацию или откат.

Обработка ошибок

Источников ошибок много. Вот несколько примеров:синтаксическая ошибка в выполняемом операторе SQL, сбой соединения или вызов метода выборки для уже отмененного или завершенного дескриптора оператора.

API БД определяет ряд ошибок, которые должны существовать в каждом модуле базы данных. В следующей таблице перечислены эти исключения.

<тд>

Предупреждение

Используется для нефатальных проблем. Должен быть подклассом StandardError.

<тд>

Ошибка

Базовый класс для ошибок. Должен быть подклассом StandardError.

<тд>

Ошибка интерфейса

Используется для ошибок в модуле базы данных, а не в самой базе данных. Ошибка должна быть подклассом.

<тд>

Ошибка базы данных

Используется для ошибок в базе данных. Ошибка должна быть подклассом.

<тд>

Ошибка данных

Подкласс DatabaseError, относящийся к ошибкам в данных.

<тд>

Ошибка эксплуатации

Подкласс DatabaseError, относящийся к таким ошибкам, как потеря соединения с базой данных. Эти ошибки, как правило, находятся вне контроля скриптера Python.

<тд>

Ошибка целостности

Подкласс DatabaseError для ситуаций, которые могут нарушить реляционную целостность, таких как ограничения уникальности или внешние ключи.

<тд>

Внутренняя ошибка

Подкласс DatabaseError, относящийся к ошибкам, внутренним для модуля базы данных, таким как курсор, который больше не активен.

<тд>

Ошибка программирования

Подкласс DatabaseError, относящийся к таким ошибкам, как неправильное имя таблицы и другие вещи, в которых можно с уверенностью обвинить вас.

<тд>

Не поддерживается ошибка

Подкласс DatabaseError, относящийся к попытке вызвать неподдерживаемую функциональность.

Серийный номер Исключение и описание
1
2
3
4
5
6
7
8
9
10

Ваши сценарии Python должны обрабатывать эти ошибки, но прежде чем использовать какие-либо из перечисленных выше исключений, убедитесь, что ваша база данных MySQL поддерживает это исключение. Вы можете получить больше информации о них, прочитав спецификацию DB API 2.0.


Python

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Словарь Питона
  6. Итераторы Python
  7. Замыкания Python
  8. Дата и время Python
  9. Сон питона ()
  10. Python — Обзор