См.также
Несмотря на стандарт SQL (ISO/IEC 9075), отдельные СУБД имеют много различий. Чтобы программистам не вникать в реализацию каждой из них, придумали общее API (PEP 249) скрывающее эти детали. Любой Python пакет реализующий это API взаимозаменяем.
PEP 249 это только спецификация, реализацию которой вам придется выполнить самостоятельно или воспользоваться уже готовой, например для sqlite3.
Также существуют реализации для других СУБД:
Большинство из них могут быть установлены стандартным способом:
$ pip install psycopg2
$ pip install mysql-python
- 0 Модуль не поддерживает потоки.
- 1 Потоки могут совместно использовать модуль, но не соединения.
- 2 Потоки могут совместно использовать модуль и соединения.
- 3 Потоки могут совместно использовать модуль, соединения и курсоры. (Под совместным использованием здесь понимается возможность использования упомянутых ресурсов без применения семафоров).
- «format» Форматирование в стиле языка ANSI C (например, «%s», «%i» ).
- «pyformat» Использование именованных спецификаторов формата в стиле Python ( «%(item)s» )
- «qmark» Использование знаков «?» для пометки мест подстановки параметров.
- «numeric» Использование номеров позиций ( «:1» ).
- «named» Использование имен подставляемых параметров ( «:name» ).
Доступ к базе данных осуществляется с помощью объекта-соединения (connection object). DB-API-совместимый модуль должен предоставлять функцию-конструктор connect() для класса объектов-соединений. Конструктор должен иметь следующие именованные параметры:
Объект-соединение, получаемый в результате успешного вызова функции
connect()
, должен иметь следующие методы:
Курсор (от англ. cursor - CURrrent Set Of Records, текущий набор записей) служит для работы с результатом запроса. Результатом запроса обычно является одна или несколько прямоугольных таблиц со столбцами-полями и строками-записями. Приложение может читать и обрабатывать полученные таблицы и записи в таблице по одной, поэтому в курсоре хранится информация о текущей таблице и записи. Конкретный курсор в любой момент времени связан с выполнением одной SQL-инструкции.
fetchmany()
. По умолчанию равен 1.rowcount - Количество записей, полученных или затронутых в результате выполнения последнего запроса. В случае отсутствия execute-запросов или невозможности указать количество записей равен -1.
description - Этот доступный только для чтения атрибут является последовательностью из семиэлементных последовательностей. Каждая из этих последовательностей содержит информацию, описывающую один столбец результата:
Первые два элемента (имя и тип) обязательны, а вместо остальных (размер для вывода, внутренний размер, точность, масштаб, возможность задания пустого значения) может быть значение None. Этот атрибут может быть равным None для операций, не возвращающих значения.
DB-API 2.0 предусматривает названия для объектов-типов, используемых для описания полей базы данных:
Объект | Тип |
---|---|
STRING | Строка и символ |
BINARY | Бинарный объект |
NUMBER | Число |
DATETIME | Дата и время |
ROWID | Идентификатор записи |
None | NULL-значение (отсутствующее значение) |
С каждым типом данных (в реальности это - классы) связан конструктор. Совместимый с DB-API модуль должен определять следующие конструкторы:
DB API спецификация требует реализацию классов исключений следующей структуры:
StandardError
├──Warning
└──Error
├──InterfaceError (a problem with the db api)
└──DatabaseError (a problem with the database)
├──DataError (bad data, values out of range, etc.)
├──OperationalError (the db has an issue out of our control)
├──IntegrityError
├──InternalError
├──ProgrammingError (something wrong with the operation)
└──NotSupportedError (the operation is not supported)