Работа с базой данных из python-приложения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с базой данных из python-приложения

Поиск

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

 

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

 

Доступ к базе данных осуществляется с помощью объекта-соединения(connectionobject). 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(при отсутствии поддержки запрошенного свойства).

 

Объект-соединение

 

Объект-соединение,получаемый в результате успешного вызова функции connect(),должен иметь следующие методы:

 

· close() Закрывает соединение с базой данных.

 

· commit() Завершает транзакцию.

 

· rollback() Откатывает начатую транзакцию(восстанавливает исходное состояние).

 

Закрытие соединения при незавершенной транзакции автоматически производит откат транзакции.

· cursor() Возвращает объект-курсор,использующий данное соединение.Если база данных не поддерживает курсоры,модуль сопряжения должен их имитировать.

 

Под транзакцией понимается группа из одной или нескольких операций,которые изменяют базу данных.Транзакция соответствует логически неделимой операции над базой данных,а частичное выполнение транзакции приводит к нарушению целостности БД.Например,при переводе денег с одного счета на другой операции по уменьшению первого счета и увеличению второго являются транзакцией.Методы commit() и rollback()

 

обозначают начало и конец транзакции в явном виде.Кстати,не все базы данных поддерживают механизм транзакций.

 

Следует отметить,что в зависимости от реализацииDB-API 2.0модуля,необходимо сохранять ссылку на объект-соединение в продолжение работы курсоров этого соединения.В частности,это означает,что нельзя сразу же получать объект-курсор,не привязывая объект-соединение к некоторому имени.Также нельзя оставлять объект-соединение в локальной переменной,возвращая из функции или метода объект-курсор.


 


Объект-курсор

 

Курсор(от англ. cursor - CURrrent Set Of Records,текущий набор записей)служит для работы с результатом запроса.Результатом запроса обычно является одна или несколько прямоугольных таблиц со столбцами-полями и строками-записями.Приложение может читать и обрабатывать полученные таблицы и записи в таблице по одной,поэтому в курсоре хранится информация о текущей таблице и записи.Конкретный курсор в любой момент времени связан с выполнением однойSQL-инструкции.

 

Атрибуты объекта-курсора тоже определеныDB-API:

 

· arraysize Атрибут,равный количеству записей,возвращаемых методом fetchmany().По умолчанию равен1.

 

· callproc(procname[, params]) Вызывает хранимую процедуру procname с

 

параметрами из изменчивой последовательности params.Хранимая процедура может изменить значения некоторых параметров последовательности.Метод может возвратить результат,доступ к которому осуществляется через fetch-методы.

 

· close() Закрывает объект-курсор.

 

· description Этот доступный только для чтения атрибут является последовательностью из семиэлементных последовательностей.Каждая из этих последовательностей содержит информацию,описывающую один столбец результата:

 

· (name, type_code, display_size, internal_size, precision, scale, null_ok)

 

Первые два элемента(имя и тип)обязательны,а вместо остальных(размер для вывода,внутренний размер,точность,масштаб,возможность задания пустого значения)может быть значение None.Этот атрибут может быть равным None для операций,не возвращающих значения.

 

· execute(operation[, parameters]) Исполняет запрос к базе данных или команду СУБД.Параметры(parameters)могут быть представлены в принятой в базе данных нотации в соответствии с атрибутом paramstyle,описанным выше.

 

· executemany(operation, seq_of_parameters) Выполняет серию запросов или команд,подставляя параметры в заданный шаблон.Параметр seq_of_parameters задает последовательность наборов параметров.

 

· fetchall() Возвращает все(или все оставшиеся)записи результата запроса.

 

· fetchmany([size]) Возвращает следующие несколько записей из результатов запроса в виде последовательности последовательностей.Пустая последовательность означает отсутствие данных.Необязательный параметр size указывает количество возвращаемых записей(реально возвращаемых записей может быть меньше).По умолчанию size равен атрибуту arraysize объекта-курсора.

 

· fetchone() Возвращает следующую запись(в виде последовательности)из результата запроса или None при отсутствии данных.

 

· nextset() Переводит курсор к началу следующего набора данных,полученного в результате запроса(при этом часть записей в предыдущем наборе может остаться непрочитанной).Если наборов больше нет,возвращает None.Не все базы данных поддерживают возврат нескольких наборов результатов за одну операцию.

 

· rowcount Количество записей,полученных или затронутых в результате выполнения последнего запроса.В случае отсутствияexecute-запросов или невозможности указать количество записей равен-1.

 

· setinputsizes(sizes) Предопределяет области памяти для параметров,используемых в операциях.Аргумент sizes задает последовательность,где каждый элемент соответствует одному входному параметру.Элемент может быть объектом-типом соответствующего параметра или целым числом,задающим длину строки.Он также может иметь значение None,если о размере входного параметра ничего нельзя сказать заранее или он предполагается очень большим.Метод должен быть вызван доexecute-методов.

 

· setoutputsize(size[, column]) Устанавливает размер буфера для выходного параметра из столбца с номером column.Если column не задан,метод устанавливает


 


размер для всех больших выходных параметров.Может использоваться,например,

 

для получения больших бинарных объектов(BinaryLargeObject,BLOB).

 

Объекты-типы

 

DB-API 2.0 предусматривает названия для объектов-типов, используемых для описания полей базы данных:

 

Объект

 

Тип

 

 

 

STRING

 

Строка и символ

 

 

 

BINARY

 

Бинарный объект

 

 

 

NUMBER

 

Число

 

 

 

DATETIME

 

Дата и время

 

 

 

ROWID

 

Идентификатор записи

 

 

 

None

 

NULL-значение (отсутствующее значение)

 

 

 

 

С каждым типом данных(в реальности это-классы)связан конструктор.Совместимый сDB-API модуль должен определять следующие конструкторы:

 

· Date(год, месяц, день) Дата.

· Time(час, минута, секунда) Время.

 

· Timestamp(год, месяц, день, час, минута, секунда) Дата-время.

· DateFromTicks(secs) Дата в виде числа секунд secs от начала эпохи(1января

 

1970 года).

· TimeFromTicks(secs) Время,то же.

 

· TimestampFromTicks(secs) Дата-время,то же.

 

· Binary(string) Большой бинарный объект на основании строки string.

 

 

Далее в лекции на конкретных примерах будет показано,как работать с базой данных из программы на языкеPython.Нужно отметить,что здесь не ставится цели постичь премудрости языка запросов(это тема отдельного курса).Простые примеры позволят понять,что при программировании наPythonдоступ к базе данных не сложнее доступа к другим источникам данных(файлам,сетевым объектам).

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 54; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.)