Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 16501 / 504 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 10:

Работа с базой данных

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Аннотация: В этой лекции рассматривается спецификация DB-API 2.0 и модуль для работы с конкретной базой данных, дается начальное представление о языке запросов SQL.

Основные понятия реляционной СУБД

Реляционная база данных - это набор таблиц с данными.

Таблица - это прямоугольная матрица, состоящая из строк и столбцов. Таблица задает отношение (relation).

Строка - запись, состоящая из полей - столбцов. В каждом поле может содержаться некоторое значение, либо специальное значение NULL (пусто). В таблице может быть произвольное количество строк. Для реляционной модели порядок расположения строк не определен и не важен.

Каждый столбец в таблице имеет собственное имя и тип.

Что такое DB-API 2

Вынесенная в заголовок аббревиатура объединяет два понятия: DB (Database, база данных) и API (Application Program Interface, интерфейс прикладной программы).

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

DB-API 2.0 описан в PEP 249 (сайт http://www.python.org/dev/peps/pep-0249/), и данное ниже описание основано именно на нем.

Описание DB API 2.0

DB API 2.0 регламентирует интерфейсы модуля расширения для работы с базой данных, методы объекта-соединения с базой, объекта-курсора текущей обрабатываемой записи, объектов различных для типов данных и их конструкторов, а также содержит рекомендации для разработчиков по реализации модулей. На сегодня Python поддерживает через модули расширения многие известные базы данных (уточнить можно на web-странице по адресу http://www.python.org/topics/database/). Ниже рассматриваются почти все положения DB-API за исключением рекомендаций для разработчиков новых модулей.

Интерфейс модуля

Здесь необходимо сказать о том, что должен предоставлять модуль для удовлетворения требований DB-API 2.0.

Доступ к базе данных осуществляется с помощью объекта-соединения (connection object). DB-API-совместимый модуль должен предоставлять функцию-конструктор connect() для класса объектов-соединений. Конструктор должен иметь следующие именованные параметры:

  • dsn Название источника данных в виде строки
  • user Имя пользователя
  • password Пароль
  • host Адрес хоста, на котором работает СУБД
  • database Имя базы данных.

Методы объекта-соединения будут рассмотрены чуть позже.

Модуль определяет константы, содержащие его основные характеристики:

  • apilevel Версия DB-API ("1.0" или "2.0").
  • threadsafety Целочисленная константа, описывающая возможности модуля при использовании потоков управления:
    • 0 Модуль не поддерживает потоки.
    • 1 Потоки могут совместно использовать модуль, но не соединения.
    • 2 Потоки могут совместно использовать модуль и соединения.
    • 3 Потоки могут совместно использовать модуль, соединения и курсоры. (Под совместным использованием здесь понимается возможность использования упомянутых ресурсов без применения семафоров).
  • paramstyle Тип используемых пометок при подстановке параметров. Возможны следующие значения этой константы:
    • "format" Форматирование в стиле языка ANSI C (например, "%s", "%i" ).
    • "pyformat" Использование именованных спецификаторов формата в стиле Python ( "%(item)s" )
    • "qmark" Использование знаков "?" для пометки мест подстановки параметров.
    • "numeric" Использование номеров позиций ( ":1" ).
    • "named" Использование имен подставляемых параметров ( ":name" ).

Модуль должен определять ряд исключений для обозначения типичных исключительных ситуаций: Warning (предупреждение), Error (ошибка), InterfaceError (ошибка интерфейса), DatabaseError (ошибка, относящаяся к базе данных). А также подклассы этого последнего исключения: DataError (ошибка обработки данных), OperationalError (ошибка в работе или сбой соединения с базой данных), IntegrityError (ошибка целостности базы данных), InternalError (внутренняя ошибка базы данных), ProgrammingError (программная ошибка, например, ошибка в синтаксисе SQL-запроса), NotSupportedError (при отсутствии поддержки запрошенного свойства).

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Асмик Гаряка
Асмик Гаряка

Почему при вычислении рейтинга не учитывается уровень, как описано? Для всех курсов У=1, хотя для Специалист должно быть 2.

Аделина Федорова
Аделина Федорова
Россия, 155900
Владимир Крюков
Владимир Крюков
Казахстан