WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Эта глава содержит описание API для Connector/Python.
Примеры нужно рассмотреть, работая на Python 2.7 или Python 3.1 и выше.
Они могли бы также работать на более старых версиях (таких как Python 2.4),
если они не используют функции, введенные в более новых версиях Python.
Например, обработка исключений используя ключевое слово
Следующий обзор показывает пакет
Модуль Этот метод настраивает связь, устанавливая сессию связи с
сервером MySQL. Если никакие аргументы не даны, это использует уже заданные
или значения по умолчанию. Для полного списка возможных аргументов посмотрите
раздел 7.1. Связь с сервером MySQL может быть установлена, используя метод
Для описаний методов связи и свойств, посмотрите
раздел 10.2. Это свойство последовательность, которая указывает на поддержанный
уровень API DB. Это свойство последовательность, которая указывает на стиль параметра
Connector/Python по умолчанию. Это свойство целое число, которое указывает на поддержанный уровень
потокобезопасности, обеспеченной Connector/Python. Это свойство указывает версию Connector/Python как строку.
Это доступно с Connector/Python 1.1.0. Это свойство указывает версию Connector/Python
как множество компонентов версии. Это доступно с Connector/Python 1.1.0. Класс Синтаксис: Конструктор Для полного списка аргументов посмотрите
раздел 7.1. Синтаксис: Для связи, полученной из пула связи, Этот метод посылает Чтобы откатиться назад вместо этого и отказаться от модификаций,
посмотрите
метод rollback(). Синтаксис: Формирует экземпляр Параметры: Вы могли использовать метод Пример: Для связи, полученной из пула связи,
Синтаксис: Этот метод настраивает связь, устанавливая сессию с сервером MySQL.
Если никакие аргументы не даны, это использует уже настроенные или значения
по умолчанию. Для полного списка возможных аргументов посмотрите
раздел 7.1. Параметры: Пример: Для связи, полученной из пула связи, класс объекта связи
Синтаксис: Этот метод возвращает объект Аргументы могут быть переданы методу
Если Для получения информации о о последствиях буферизования посмотрите
раздел 10.6.1
. Если Если Если Если Параметр Возвращенный объект зависит от комбинации аргументов. Примеры: Если not buffered and not raw:
Если buffered and not raw:
Если not buffered and raw: Если buffered and raw:
Изменяет пользователя, использующего Синтаксис: Возвращает словарь, содержащий OK информацию о пакете. Приказывает серверу писать отладочную информацию в журнал ошибок.
Подключенный пользователь должен иметь привилегию
Возвращает словарь, содержащий OK информацию о пакете. Синтаксис: Этот метод делает определенную базу данных базой данных по умолчанию.
В последующих запросах эта база данных будет умолчанием для ссылок на
таблицу, которые не включают явного определителя базы данных. Возвращает словарь, содержащий OK информацию о пакете. Проверка, работает ли связь с сервером. Этот метод не должен использоваться непосредственно. Используйте
ping() или
is_connected(). Возвращает словарь, содержащий OK информацию о пакете. Этот метод поднимает исключение NotSupportedError.
Вместо этого используйте Эта функциональность MySQL Server устарела. Синтаксис: Эта функциональность MySQL Server устарела. Просит сервер убить поток Возвращает словарь, содержащий OK информацию о пакете. Следующие две строки имеют тот же самый эффект: Синтаксис: Этот метод посылает данный Возвращенный словарь содержит информацию в зависимости от того, какой
запрос был выполнен. Если запрос
Ошибки, полученные от сервера MySQL, подняты как исключения.
Возвращает словарь. Синтаксис: Аналог
cmd_query(), но вернет объект генератора для итерации результата.
Используйте Следующий пример показывает, как работать с результатами после
отправки многочисленных запросов: Возвращает объект генератора. Этот метод посылает Синтаксис: Эта функциональность MySQL Server устарела. Этот метод сбрасывает таблицы или кэши или информацию о сервере
репликации. Подключенный пользователь должен иметь привилегию
Для списка вариантов посмотрите
раздел 10.11. Пример: Синтаксис: Перезагружает связь, посылая
Этот метод разрешает состоянию сеанса быть очищенным без
переподтверждения. Для серверов MySQL, более старых, чем 5.7.3 (когда
был введен Этот метод добавлен в Connector/Python 1.2.1. Эта функциональность MySQL Server устарела. Просит сервер базы данных завершиться. Подключенный пользователь должен
иметь привилегию Возвращает словарь, содержащий OK информацию о пакете. Возвращает словарь, содержащий информацию о сервере MySQL включая
продолжительность работы в секундах и количество работающих потоков,
запросов, перезагрузок и открытых таблиц. Этот метод пытается послать Чтобы закрыть связь, не посылая Этот метод восстанавливает следующую строку
набора результата запроса, возвращая кортеж. Кортеж, возвращенный Строка как кортеж, содержащий объекты байта или
EOF как словарь, содержащий
Метод Синтаксис: Этот метод получает все или остающиеся строки набора результата запроса,
возвращая кортеж, содержащий строки как последовательности и EOF.
Аргумент количества может использоваться, чтобы получить заданное количество
строк. Если количество не определяется или Кортеж, возвращенный Список кортежей, содержащих данные о строке как байт-объекты
или пустой список, когда никакие строки недоступны. EOF как словарь, содержащий
MySQLCursor
использует метод Возвращает кортеж. Этот метод возвращает информацию о сервере MySQL дословно как
последовательность, например, Этот метод возвращает версию сервера MySQL как кортеж или
Сообщает, доступна ли связь с MySQL Server. Этот метод проверяет, является ли связь с MySQL доступной, используя
метод ping()
, но в отличие от этого Синтаксис: Этот метод вернет Синтаксис: Проверяет, доступна ли связь с сервером MySQL. Когда Когда связь недоступна, Поднимает на ошибках Синтаксис: Попытка снова соединиться с сервером MySQL. Аргумент Вы могли бы определить число попыток выше и использовать более длинную
задержку, когда вы ожидаете, что сервер MySQL остановлен для обслуживания,
или когда вы будете ожидать, что сеть будет временно недоступна. Синтаксис: Перезагружает связь, повторно подтверждая подлинность, чтобы очистить
состояние сеанса. Пример: Этот метод перезагружает состояние сеанса, повторно подтверждая
подлинность. Для серверов MySQL 5.7 или выше
Этот метод добавлен в Connector/Python 1.2.1. Этот метод посылает серверу MySQL запрос
Чтобы передать модификации, посмотрите метод
commit().
Синтаксис: Этот метод устанавливает набор символов и сопоставление для текущей связи.
Параметр Когда В следующем примере мы устанавливаем набор символов в
Определите данное сопоставление следующим образом: Синтаксис: Этот метод устанавливает флаги клиента, соединяясь с сервером MySQL и
возвращает новое значение как целое число.
Параметр Если Флаги клиента устанавливаются или используются только соединяясь с
сервером MySQL. Поэтому необходимо снова соединиться после внесения изменений.
Этот метод закрывает сокет. Это не поднимает исключений. В отличие от этого,
Этот метод начинает транзакцию. Это принимает аргументы, указывающие,
использовать ли последовательный снимок, который уровень изоляции транзакции
нужен и операционный режим доступа: По умолчанию По умолчанию Параметр Вызов Чтобы определить, активна ли транзакция для связи, используйте свойство
in_transaction. Этому свойству можно назначить значение Autocommit отключен по умолчанию, соединяясь через Connector/Python.
Это может быть позволено, используя
параметр соединения Когда autocommit выключен, необходимо
передавать
транзакции, используя механизмы системы хранения транзакций, например,
Указывает, есть ли непрочитанный результат. Это установлено в
Не устанавливайте значение этому свойству, поскольку только
соединитель должен изменить значение. Другими словами, рассматривайте это как
свойство только для чтения. Это свойство указывает на значение параметра связи
Это добавлено в Connector/Python 2.1.1. Это свойство возвращает последовательность, указывающую, какой набор
символов используется для связи. Это свойство возвращает последовательность, указывающую, какое
сопоставление используется для связи. Это свойство возвращает ID связи (ID потока или сессии)
для текущей связи (целое число) или
Это свойство устанавливает текущую базу данных, выполняя запрос
Возвращает последовательность. Этому свойству можно назначить значение Получение предупреждений автоматически может быть полезным, отлаживая
запросы. Курсоры делают предупреждения доступными через метод
MySQLCursor.fetchwarnings(). Возвращает Это свойство вернет Этому свойству можно назначить значение Определение Вы могли бы всегда хотеть установить режим SQL, если требуется иметь
сервер MySQL, непосредственно сообщающий о предупреждениях как об ошибках
(см.
раздел 10.2.47). Также хорошо использовать транзакционные механизмы,
таким образом транзакции могут быть отменены, ловя исключение. Наборы результатов должны быть получены полностью, прежде чем любое
исключение может быть поднято. Следующий пример показывает выполнение
запроса, который производит предупреждение: Вернет Это свойство только для чтения возвращает имя хоста или IP-адрес,
используемый для соединения с сервером MySQL. Возвращает последовательность. Это свойство только для чтения возвращает порт TCP/IP, используемый для
соединения с сервером MySQL. Возвращает целое число. Это свойство используется, чтобы получить и установить режимы SQL
для текущей связи. Значение должно быть списком различных режимов, отделенных
запятой (","), или последовательностью режимов, предпочтительно используя
класс Чтобы сбросить все режимы, передайте пустую строку
или пустую последовательность. Возвращает последовательность. Это свойство используется, чтобы установить или узнать
переменную сеанса часового пояса для текущей связи. Возвращает последовательность. Это свойство только для чтения возвращает файл сокета Unix
для соединения с сервером MySQL. Возвращает последовательность. Это свойство только для чтения возвращает имя пользователя, используемое
для соединения с сервером MySQL. Возвращает строку. Этот класс предоставляет экземпляр и управление пулами связи. Синтаксис: Конструктор создает объект, который управляет пулом связи. Параметры: Если несколько пулов имеют одинаковое имя, это не ошибка.
Приложение, которое должно отличить пулы по их
Пример: Синтаксис: Этот метод добавляет новое или существующее соединение
Параметры: Пример: Синтаксис: Этот метод возвращает связь из пула или поднимает исключение
Пример: Синтаксис: Этот метод устанавливает параметры конфигурации для связей в пуле.
Связи, получаемые из пула после использования изменения конфигурации, имеют
новые параметры. Связи, полученные перед изменением, остаются незатронутыми,
но когда они закрываются (возвращены в пул), будут вновь открыты с новыми
параметрами прежде, чем возвращены пулом для последующих запросов связи. Параметры: Пример: Синтаксис: Это свойство возвращает название пула связи. Пример: Этот класс используется Объекты связи Чтобы освбодить объединенную связь, полученную из пула связи,
вызовите Объединенная связь не может повторно формироваться, используя
У объединенной связи есть свойство
Синтаксис: Конструктор конструктор берет пул связи и аргументы соединения и
возвращает объединенную связь. Это используется классом
Параметры: Пример: Синтаксис: Возвращает объединенную связь в ее пул связи. Для объединенной связи Если параметры конфигурации пула изменяются, возвращенная связь закрыта и
вновь открыта с новой конфигурацией прежде, чем быть возвращенной из пула
снова в ответ на запрос связи. Для объединенных связей Синтаксис: Это свойство возвращает название пула связи, которому принадлежит связь.
Пример: Класс Чтобы создать курсор, используйте метод
Несколько связанных классов наследуют
В большинстве случаев метод
Также возможно создать курсор, передавая объект
Аргумент соединения дополнительный. Если опущен, курсор создается, но
метод
Синтаксис: Этот метод вызывает хранимую процедуру, указанную параметром
Наборы результатов, произведенные хранимой процедурой, автоматически
получены и сохранены как экземпляры
MySQLCursorBuffered. Для получения дополнительной информации об
использовании этих наборов результатов посмотрите
Предположим, что хранимая процедура берет два параметра, умножает
значения и возвращает результат: Следующий пример показывает, как выполнить
Connector/Python 1.2.1 и выше разрешает типам параметра быть
определенными. Чтобы сделать это, определите параметр как кортеж с двумя
пунктами, состоящий из значения параметра и типа. Предположим, что процедура
Чтобы выполнять эту процедуру от Connector/Python, определяя тип для
параметра Синтаксис: Этот метод закрывает курсор, перезагружает все результаты и гарантирует,
что у объекта курсора нет ссылки на оригинальный объект связи. Синтаксис: Этот метод выполняет данное действие
В Python кортеж, содержащий единственную значение, должен включать
запятую. Например, ('abc')
оценено как скаляр, в то время как
('abc',) оценено как кортеж. Этот пример вставляет информацию о новом сотруднике, затем выбирает данные
для того человека. Запросы выполняются как отдельные действия
Значения данных преобразовываются по мере необходимости от объектов Python
до чего-то, что MySQL понимает. В предыдущем примере экземпляр
Если Следующий пример выбирает и вставляет данные в одной операции
Если связь формируется, чтобы получить предупреждения, то все
предупреждения, произведенные операцией, доступны через метод
MySQLCursor.fetchwarnings(). Синтаксис: Этот метод готовит В Python кортеж, содержащий единственную значение, должен включать
запятую. Например, ('abc')
оценено как скаляр, в то время как
('abc',) оценено как кортеж. В большинстве случаев метод Оптимизация применяется для вставок: значения данных, данные
последовательностями параметра, скомплектованы, используя синтаксис
многократной строки. Следующий пример вставляет три записи: Для предыдущего примера в MySQL послан такой
С методом Синтаксис: Метод приносит все (или все остающиеся) строки набора результата запроса и
возвращает список кортежей. Если больше строк недоступно, это
возвращает пустой список. Следующий пример показывает, как получить первые два строки набора
результатов, а затем любые остающиеся строки: Необходимо принести все строки для текущего запроса прежде, чем выполнить
новые запросы, используя ту же самую связь. Синтаксис: Этот метод приносит следующий набор строк результата запроса и возвращает
список кортежей. Если больше строк недоступно, это возвращает пустой список.
Количество возвращенных строк может быть определено, используя параметр
Необходимо принести все строки для текущего запроса прежде, чем выполнить
новые запросы, используя ту же самую связь. Синтаксис: Этот метод следующую строку набора результата запроса и возвращает
единственную последовательность или Метод Следующий пример показывает два эквивалентных способа обработать результат
запроса. Первое использование Необходимо принести все строки для текущего запроса прежде, чем выполнить
новые запросы, используя ту же самую связь. Синтаксис: Этот метод возвращает список кортежей, содержащих предупреждения,
произведенные ранее выполненной операцией. Чтобы установить, получать ли
предупреждения, используйте свойство соединения
Следующий пример показывает
Когда предупреждения произведены, возможно поднять ошибки вместо этого,
используя свойство соединения
Синтаксис: Этот метод возвращает список итераторов, который может использоваться,
чтобы обработать наборы результатов, произведенные хранимой процедурой,
выполненной, используя метод
callproc().
Наборы результатов остаются доступными, пока вы не используете курсор, чтобы
выполнить другую операцию или вызвать другую хранимую процедуру. Следующий пример выполняет хранимую процедуру, которая производит два
набора результатов, затем использует
Синтаксис: Это свойство только для чтения возвращает имена столбцов
набора результатов как последовательность строк Unicode. Следующий пример показывает, как создать словарь из кортежа, содержащего
данные с использованием ключей Альтернативно, с Connector/Python 2.0.0 можно принести строки как
словари непосредственно, посмотрите
раздел 10.6.4.
Синтаксис: Это свойство только для чтения возвращает список кортежей, описывающих
колонки в наборе результатов. Каждый кортеж в списке содержит
значения следующим образом: Следующий пример показывает, как интерпретировать кортежи
Вывод похож на это: Синтаксис: Это свойство только для чтения возвращает значение, произведенное для
столбца Свойство Синтаксис: Это свойство только для чтения возвращает количество строк, возвращенных
для Для небуферизированных курсоров не может быть известно количество строк
прежде, чем строки были принесены. В этом случае количество строк -1
немедленно после выполнения запроса и увеличено, по мере получения строк. Свойство Синтаксис: Это свойство только для чтения возвращает последний выполненный запрос
как последовательность. Свойство Последовательность может содержать многочисленные запросы, если
последовательность многократных запросов была выполнена. Это происходит для
Синтаксис: Это свойство только для чтения вернет Свойство Классы курсора, описанные в следующих разделах, наследуют от класса
Класс После выполнения запроса курсор
Для запросов, выполненных, используя буферизированный курсор, получающие
строки методы, такие как
Чтобы создать буферизированный курсор, используйте аргумент
Пример: Для случая практического применения посмотрите
раздел 6.1.
Класс Курсор Чтобы создать сырой курсор, используйте параметр
Пример: Класс Курсор Чтобы создать буферизированный сырой курсор, используйте метод
Пример: Класс Курсор Пример: Предыдущий код производит такой вывод: Может быть удобно передать словарь в
Класс Курсор Чтобы получить буферизированный курсор, который возвращает словари,
добавьте параметр Класс Курсор Пример: Класс Курсор Чтобы получить буферизированный курсор, который возвращает названные
кортежи, добавьте параметр Класс Этот класс доступен с Connector/Python 1.1.0.
Расширение C поддерживает его с Connector/Python 8.0.17. В MySQL есть два способа выполнить подготовленный запрос: Используйте двоичный протокол клиент-сервер, чтобы послать и получить
данные. Чтобы неоднократно выполнить тот же самый запрос с различными данными
для различного выполнения, это более эффективно, чем использование
В Connector/Python есть два способа создать курсор, который позволяет
выполнение подготовленных запросов, используя протокол двоичной синхронной
передачи данных. В обоих случаях метод Более простой синтаксис использует параметр
Альтернативно, создайте экземпляр класса
Курсор, порожденный от класса
В первый раз вы передаете запрос методу
Метод Пример: Для первого вызова Для последующего вызова Подготовленные запросы, выполненные с
Чтобы использовать многочисленные подготовленные запросы одновременно,
создайте многократные курсоры от класса
У протокола MySQL клиент-сервер есть опция послать подготовленные
параметры операторов через команду
Этот класс предоставляет определение констант флагов клиента MySQL,
которые могут использоваться, когда связь устанавливается, чтобы формировать
сессию. Класс См.
раздел 10.2.32 и
параметры соединения Этот класс обеспечивает все поддержанные поля MySQL или типы данных.
Они могут быть полезными, имея дело с необработанными данными или определяя
ваши собственные конвертеры. Тип поля хзранится с курсором в описании
для каждого столбца. Следующий пример показывает, как напечатать название типа данных для
каждого столбца в наборе результатов. Этот класс предоставляет все известные
режимы SQL. Это главным образом используется, устанавливая
режимы SQL во время связи, используя свойство связи
Класс Этот класс обеспечивает все известные наборы символов MySQL
и их сопоставления по умолчанию. Для примеров посмотрите
раздел 10.2.31. Класс Этот класс выполняет различные операции по сбросу. Освежить таблицы привилегий, аналогично
Сбросить журналы как
Сбросить кэш таблиц как
Сбросить кэш хоста как
Сбросить переменные статуса аналогично
Сбросить кэш потоков. На подчиненном сервере репликации сбросить информацию о главном сервере и
перезапустить подчиненного аналогично
Модуль Классы исключений, определенные в этом модуле главным образом, следуют
спецификации Python Database API Specification v2.0 (PEP 249).
Для некоторых клиентов MySQL или ошибок сервера не всегда ясно,
которое исключение поднять. Ошибки MySQL Server отображены на исключения Python на основе их
значения SQLSTATE (см.
Server Error Message Reference).
Следующая таблица показывает классы SQLSTATE и исключения
поднимаемые Connector/Python. Однако, возможно пересмотреть, какое исключение
поднято для каждой ошибки сервера. Исключение по умолчанию
Таблица 10.1. Отображение ошибок сервера к исключениям Python Этот модуль содержит коды ошибок клиента и сервера MySQL,
определенные как атрибуты модуля с кодом ошибки как значение.
Используя коды ошибок вместо номеров ошибок можно сделать чтение исходного
кода немного легче. Для получения дополнительной информации об ошибках MySQL посмотрите
Errors, Error Codes, and Common Problems. Это исключение базовый класс для всех других исключений в модуле
Следующий пример показывает, как мы могли поймать синтаксические ошибки:
Инициализация исключения поддерживает несколько дополнительных аргументов,
а именно Следующие примеры показывают результат, не используя аргументов
или комбинации аргументов: Пример, который использует код ошибки 1146, используется, когда
Connector/Python получает ошибочный пакет от сервера MySQL.
Информация разобрана и передана к исключению
Каждый подкласс исключения от Следующий пример показывает, как обработать ошибки, когда удаляемая
таблица не существует (когда
До Connector/Python 1.1.1 исходное сообщение, переданное
Это исключение поднято, когда были проблемы с данными.
Примеры: установка столбца в Это исключение является умолчанием для любой ошибки MySQL, которая не
соответствует другим исключениям. Это исключение поднято, когда относительная целостность данных затронута.
Например, двойной ключ был вставлен или ограничение внешнего ключа неудачно.
Следующий пример показывает, что ошибка дублирования ключа
подняла IntegrityError: Это исключение поднято для ошибок, происходящих из самого
Connector/Python, не связанных с сервером MySQL. Это исключение поднято, когда сервер MySQL сталкивается с внутренней
ошибкой, например, когда мертвая блокировка произошла. Это исключение поднято, когда была использована некоторая функция, которая
не поддерживается версией MySQL, которая возвратила ошибку.
Это также поднято, используя функции или запросы, которые не
поддерживаются сохраненными подпрограммами. Это исключение поднято для ошибок, которые связаны с действиями MySQL.
Например: слишком много связей, имя хоста не могло быть найдено,
плохое рукопожатие, сервер закрывается, ошибки связи. Это исключение поднято для ошибок пула связи.
Это исключение поднято на программных ошибках, например когда у вас есть
синтаксическая ошибка в SQL или таблица не была найдена. Следующий пример показывает, как обращаться с синтаксическими ошибками:
Это исключение используется для сообщения о важных предупреждениях,
однако, Connector/Python не использует его. Это включено, чтобы быть
совместимым с Python Database Specification v2.0 (PEP-249). Рассмотрите использование более строгого
режима SQL или параметра соединения
raise_on_warnings,
чтобы заставить Connector/Python поднять ошибки, когда ваши
запросы произведут предупреждения. Синтаксис: Этот метод определяет исключения для ошибок сервера MySQL и
возвращает текущие настройки. Если Чтобы перезагрузить настройки, задайте пустой словарь.
Глава 10. Connector/Python API
as
была введена в Python 2.6
и не будет работать в Python 2.4.mysql.connector
с его модулями.
В настоящее время только самые полезные модули, классы и методы для
конечных пользователей описаны.
mysql.connector
errorcode
errors
connection
constants
conversion
cursor
dbapi
locales
eng
client_error
protocol
utils
10.1. Модуль mysql.connector
mysql.connector
предоставляет методы и свойства верхнего уровня.
10.1.1. Метод mysql.connector.connect()
mysql.connector.connect()
или класс
mysql.connector.MySQLConnection()
:
cnx = mysql.connector.connect(user='joe', database='test')
cnx = MySQLConnection(user='joe', database='test')
10.1.2. Свойство mysql.connector.apilevel
>>> mysql.connector.apilevel
'2.0'
10.1.3. Свойство mysql.connector.paramstyle
>>> mysql.connector.paramstyle
'pyformat'
10.1.4. Свойство mysql.connector.threadsafety
>>> mysql.connector.threadsafety
1
10.1.5. Свойство mysql.connector.__version__
>>> mysql.connector.__version__
'1.1.0'
10.1.6. Свойство mysql.connector.__version_info__
>>> mysql.connector.__version_info__
(1, 1, 0, 'a', 0)
10.2. Класс connection.MySQLConnection
MySQLConnection
используется, чтобы открыть и управлять связью с сервером MySQL.
Это также раньше посылало команды и SQL-операторы и читало результаты.
10.2.1. Конструктор connection.MySQLConnection()
cnx = MySQLConnection(**kwargs)
MySQLConnection
инициализирует атрибуты и когда по крайней мере один аргумент передается, он
пытается соединиться с сервером MySQL.
10.2.2. Метод MySQLConnection.close()
cnx.close()
close()
синоним
disconnect()
. См.
раздел
10.2.20.close()
на самом деле не закрывает ее, а возвращает в пул и делает доступной для
последующих запросов связи. Посмотрите
раздел 9.1.
10.2.3. Метод MySQLConnection.commit()
COMMIT
серверу MySQL,
передавая текущую транзакцию. Connector/Python по умолчанию не делает
autocommit, поэтому важно вызвать этот метод после каждой транзакции, которая
изменяет данные для таблиц с транзакционным механизмом хранения.
>>> cursor.execute("INSERT INTO employees (first_name)
VALUES (%s)", ('Jane'))
>>> cnx.commit()
10.2.4. Метод MySQLConnection.config()
cnx.config(**kwargs)
MySQLConnection
после того, как это создано. Для полного списка возможных аргументов
посмотрите раздел
7.1.kwargs
: Аргументы соединения.
config()
,
чтобы изменить (например), имя пользователя, а затем вызвать
reconnect()
.
cnx = mysql.connector.connect(user='joe', database='test')
# Connected as 'joe'
cnx.config(user='jane')
cnx.reconnect()
# Now connected as 'jane'
config()
поднимает исключение. Посмотрите
раздел 9.1.
10.2.5. Метод MySQLConnection.connect()
MySQLConnection.connect(**kwargs)
kwargs
: Аргументы соединения.
cnx = MySQLConnection(user='joe', database='test')
PooledMySQLConnection
.
Объединенная связь отличается от необъединенной связи, как описано в
разделе 9.1.
10.2.6. Метод MySQLConnection.cursor()
cursor = cnx.cursor([arg=value[, arg=value]...])
MySQLCursor()
или его подкласс в зависимости от передаваемых аргументов.
Возвращенный объект это экземпляр
cursor.CursorBase
.
Для получения дополнительной информации об объектах курсора, посмотрите
разделы 10.5 и
10.6.cursor()
, чтобы контролировать,
какой курсор создать:buffered
=
True
, курсор приносит все строки от сервера
после того, как операция будет выполнена. Это полезно, когда запросы
возвращают небольшие наборы результатов.
buffered
может использоваться один или в
сочетании с параметром dictionary
или
named_tuple
.buffered
может также быть передан
connect()
, чтобы установить способ
буферизации по умолчанию для всех курсоров, созданных из объекта связи.
Посмотрите раздел 7.1.
raw
=
True
, курсор пропускает преобразование от типов
данных MySQL в типы Python. Сырой курсор обычно используется, чтобы получить
лучшую производительность или когда вы хотите сделать преобразование сами.
raw
может также быть передан
connect()
, чтобы установить режим без
предварительной обработки по умолчанию для всех курсоров, созданных из
объекта связи. Посмотрите
раздел 7.1.dictionary
=
True
, курсор возвращает строки как словари.
Этот аргумент доступен с Connector/Python 2.0.0.named_tuple
=
True
, курсор возвращает строки как названные
кортежами. Этот аргумент доступен с Connector/Python 2.0.0.prepared
=
True
, курсор используется для выполнения
подготовленных запросов. Этот аргумент доступен с Connector/Python 1.1.2.
Расширение C поддерживает это с Connector/Python 8.0.17.cursor_class
может использоваться, чтобы передать класс для того, чтобы создать
новый курсор. Это должен быть подкласс
cursor.CursorBase
.MySQLCursor
.MySQLCursorBuffered
.MySQLCursorRaw
.MySQLCursorBufferedRaw
.
10.2.7. Метод MySQLConnection.cmd_change_user()
username
и password
. Это также назначит указанную
database
базой данных по умолчанию.
Также возможно изменить набор символов, используя параметр
charset
.
cnx.cmd_change_user(username='', password='', database='', charset=33)
10.2.8. Метод MySQLConnection.cmd_debug()
SUPER
.
10.2.9. Метод MySQLConnection.cmd_init_db()
cnx.cmd_init_db(db_name)
10.2.10. Метод MySQLConnection.cmd_ping()
10.2.11. Метод MySQLConnection.cmd_process_info()
SHOW PROCESSLIST
или запрос таблицы в базе данных
INFORMATION_SCHEMA
.
10.2.12. Метод MySQLConnection.cmd_process_kill()
cnx.cmd_process_kill(mysql_pid)
mysql_pid
.
Хотя все еще доступно, лучше использовать SQL-оператор
KILL
.
>>> cnx.cmd_process_kill(123)
>>> cnx.cmd_query('KILL 123')
10.2.13. Метод MySQLConnection.cmd_query()
cnx.cmd_query(statement)
statement
серверу MySQL и получает результат. Чтобы послать многочисленные запросы,
используйте
cmd_query_iter().SELECT
, результат содержит информацию о
столбцах. Другие запросы возвращают словарь, содержащий OK или EOF.InterfaceError
поднято, когда
многократные результаты найдены.
10.2.14. Метод MySQLConnection.cmd_query_iter()
cnx.cmd_query_iter(statement)
cmd_query_iter()
посылая
многочисленные запросы и отделяете запросы точками с запятой.
statement = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cnx.cmd_query_iter(statement):
if 'columns' in result:
columns = result['columns']
rows = cnx.get_rows()
else:
# do something useful with INSERT result
10.2.15. Метод MySQLConnection.cmd_quit()
QUIT
серверу MySQL,
закрывая текущую связь. С тех пор от сервера MySQL нет никакого ответа,
пакет, который послали, возвращен.
10.2.16. Метод MySQLConnection.cmd_refresh()
cnx.cmd_refresh(options)
RELOAD
.options
должен быть значением битовой маски,
построенной, используя константы из класса
constants.RefreshOption
.
>>> from mysql.connector import RefreshOption
>>> refresh = RefreshOption.LOG | RefreshOption.THREADS
>>> cnx.cmd_refresh(refresh)
10.2.17. Метод MySQLConnection.cmd_reset_connection()
cnx.cmd_reset_connection()
COM_RESET_CONNECTION
серверу, чтобы очистить состояние сеанса.COM_RESET_CONNECTION
),
должен использоваться метод
reset_session()
.
Этот метод перезагружает состояние сеанса, повторно подтверждая подлинность,
что является более дорогим.
10.2.18. Метод MySQLConnection.cmd_shutdown()
SHUTDOWN
.
10.2.19. Метод MySQLConnection.cmd_statistics()
10.2.20. Метод MySQLConnection.disconnect()
QUIT
и
закрыть сокет. Это не поднимает исключений.MySQLConnection.close()
синоним
этого метода и чаще всего используемый.QUIT
,
используйте
shutdown()
.
10.2.21. Метод MySQLConnection.get_row()
get_row()
состоит из:None
, когда больше строк недоступно.status_flag
и
warning_count
или
None
,
когда возвращенная строка не является последней.get_row()
используется
MySQLCursor,
чтобы получить строки.
10.2.22. Метод MySQLConnection.get_rows()
cnx.get_rows(count=None)
None
,
все строки возвращаются.get_rows()
состоит из:
status_flag
и
warning_count
.InterfaceError
поднято, когда все
строки были получены.get_rows()
,
чтобы получить строки.
10.2.23. Метод MySQLConnection.get_server_info()
'5.6.11-log'
или
None
, если не связан.
10.2.24. Метод MySQLConnection.get_server_version()
None
, если не связан.
10.2.25. Метод MySQLConnection.is_connected()
ping()
,
is_connected()
вернет
True
, когда связь доступна,
False
иначе.
10.2.26. Метод MySQLConnection.isset_client_flag()
cnx.isset_client_flag(flag)
True
, если флаг клиента был
установлен, False
иначе.
10.2.27. Метод MySQLConnection.ping()
cnx.ping(reconnect=False, attempts=1, delay=0)
reconnect
=
True
, сделано
attempts
попыток снова соединиться с сервером
MySQL, и эти опции отправлены методу
reconnect(). Используйте метод delay
(секунды), если вы хотите ждать перед каждой повторной попыткой.InterfaceError
поднято. Используйте метод
is_connected(), чтобы проверить связь, не поднимая ошибку.InterfaceError
.
10.2.28. Метод MySQLConnection.reconnect()
cnx.reconnect(attempts=1, delay=0)
attempts
определяет число раз, которое надо попробовать снова соединиться.
Аргумент delay
это
число секунд, которое ждать перед каждой повторной попыткой.
10.2.29. Метод MySQLConnection.reset_session()
cnx.reset_session(user_variables = None, session_variables = None)
user_variables
, если задан,
это словарь имен и значений пользовательских переменных.
session_variables
, если задан, это словарь
словарь имен и значений системных переменных.
Метод устанавливает каждую переменную в данное значение.
user_variables = {'var1': '1', 'var2': '10'}
session_variables = {'wait_timeout': 100000, 'sql_mode': 'TRADITIONAL'}
self.cnx.reset_session(user_variables, session_variables)
cmd_reset_connection()
более легкая альтернатива.
10.2.30. Метод MySQLConnection.rollback()
ROLLBACK
, отменяя все изменения данных от
текущей транзакции. По умолчанию Connector/Python не делает autocommit,
таким образом, возможно отменить транзакции, используя механизмы
хранения транзакций, например, InnoDB
.
>>> cursor.execute("INSERT INTO employees (first_name)
VALUES (%s)", ('Jane'))
>>> cnx.rollback()
10.2.31. Метод MySQLConnection.set_charset_collation()
cnx.set_charset_collation(charset=None, collation=None)
charset
может быть названием набора
символов или числовым эквивалентом, как определено в
constants.CharacterSet
.collation
=
None
, используется сопоставление по умолчанию
для набора символов.latin1
и сопоставление в
latin1_swedish_ci
(сопоставление по умолчанию
для latin1
):
>>> cnx = mysql.connector.connect(user='scott')
>>> cnx.set_charset_collation('latin1')
>>> cnx = mysql.connector.connect(user='scott')
>>> cnx.set_charset_collation('latin1', 'latin1_general_ci')
10.2.32. Метод MySQLConnection.set_client_flags()
cnx.set_client_flags(flags)
flags
может быть целым числом или
последовательностью действительных флаговых значений клиента (см.
раздел 10.7).flags
последовательность, каждый пункт в
последовательности устанавливает флаг, когда значение положительно или
сбрасывает его, когда отрицательно. Например, чтобы сбросить
LONG_FLAG
и установить
FOUND_ROWS
:
>>> from mysql.connector.constants import ClientFlag
>>> cnx.set_client_flags([ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG])
>>> cnx.reconnect()
10.2.33. Метод MySQLConnection.shutdown()
disconnect()
,
shutdown()
закрывает связь клиента, не пытаясь сначала послать
QUIT
серверу. Таким образом это не заблокирует,
если связь будет разрушена по некоторым причинам, например,
из-за отказа сети.shutdown()
добавлен в Connector/Python 2.0.1.
10.2.34. Метод MySQLConnection.start_transaction()
cnx.start_transaction(consistent_snapshot=
bool
,
isolation_level=level
,
readonly=access_mode
)
consistent_snapshot
=
False
. Если значение
True
, Connector/Python посылает
WITH CONSISTENT SNAPSHOT
с запросом.
MySQL игнорирует это для уровней изоляции, для которых не
применяется этот вариант.isolation_level
=
None
, разрешенные значения:
'READ UNCOMMITTED'
,
'READ COMMITTED'
,
'REPEATABLE READ'
и
'SERIALIZABLE'
. Если
isolation_level
=
None
, никакой уровень изоляции не посылают,
таким образом, применяется уровень по умолчанию.readonly
может быть
True
, чтобы начать транзакцию в режиме
READ ONLY
или False
для режима READ WRITE
. Если
readonly
пропущен,
режим доступа сервера по умолчанию используется.
Для получения дополнительной информации об операционном режиме доступа см.
описание для START TRANSACTION
в
START TRANSACTION, COMMIT, and ROLLBACK Statements.
Если сервер более старый, чем MySQL 5.6.5, он не поддерживает настройку
режима доступа, и Connector/Python поднимает исключение
ValueError
.start_transaction()
поднимает
исключение ProgrammingError
, если вызван
в то время, как происходит транзакция. Это отличается от выполнения
SQL-запроса START TRANSACTION
в то время как происходит транзакция: запрос неявно
передает текущую транзакцию.start_transaction()
добавлен в
MySQL Connector/Python 1.1.0. Параметр readonly
добавлен в Connector/Python 1.1.5.
10.2.35. Свойство MySQLConnection.autocommit
True
или False
, чтобы позволить или отключить
autocommit в MySQL. Свойство может быть вызвано, чтобы
узнать значение autocommit.autocommit
.InnoDB
или
NDBCluster
.
>>> cnx.autocommit
False
>>> cnx.autocommit = True
>>> cnx.autocommit
True
10.2.36. Свойство MySQLConnection.unread_results
False
, если нет непрочитанного результата, иначе
True
. Это используется курсорами, чтобы
проверить, должен ли другой курсор все еще получить свой набор результатов.
10.2.37. Свойство MySQLConnection.can_consume_results
consume_results
, который управляет, прочитаны ли
наборы результатов, произведенные запросами автоматически. См.
раздел 7.1.
10.2.38. Свойство MySQLConnection.charset
10.2.39. Свойство MySQLConnection.collation
10.2.40. Свойство MySQLConnection.connection_id
None
, если нет связи.
10.2.41. Свойство MySQLConnection.database
USE
. Свойство может также использоваться, чтобы
узнать текущее имя базы данных.
>>> cnx.database = 'test'
>>> cnx.database = 'mysql'
>>> cnx.database
u'mysql'
10.2.42. Свойство MySQLConnection.get_warnings
True
или False
, чтобы позволить или отключить
автоматическое получение предупреждений.
Умолчание False
. Свойство может быть применено,
чтобы узнать текущее состояние предупреждений.
>>> cnx.get_warnings = True
>>> cursor.execute('SELECT "a"+1')
>>> cursor.fetchall()
[(1.0,)]
>>> cursor.fetchwarnings()
[(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
True
или
False
.
10.2.43. Свойство MySQLConnection.in_transaction
True
или
False
, чтобы указать, активна ли транзакция для
связи. Значение True
независимо от того, начинаете ли вы транзакцию, используя вызов API
start_transaction()
или непосредственно выполняя SQL-оператор
START TRANSACTION
или
BEGIN
.
>>> cnx.start_transaction()
>>> cnx.in_transaction
True
>>> cnx.commit()
>>> cnx.in_transaction
False
in_transaction
добавлено в
MySQL Connector/Python 1.1.0.
10.2.44. Свойство MySQLConnection.raise_on_warnings
True
или False
, чтобы позволить или отключить, должны
ли предупреждения поднять исключения. Умолчание
False
. Свойство может быть использовано, чтобы
узнать текущий режим исключений.raise_on_warnings
также
установит get_warnings
потому что предупреждения должны быть получены, чтобы они могли быть
подняты как исключения.
>>> cnx.raise_on_warnings = True
>>> cursor.execute('SELECT "a"+1')
>>> cursor.fetchall()
..
mysql.connector.errors.DataError: 1292: Truncated incorrect DOUBLE value: 'a'
True
или
False
.
10.2.45. Свойство MySQLConnection.server_host
10.2.46. Свойство MySQLConnection.server_port
10.2.47. Свойство MySQLConnection.sql_mode
constants.SQLMode
.
>>> cnx.sql_mode = 'TRADITIONAL,NO_ENGINE_SUBSTITUTION'
>>> cnx.sql_mode.split(',')
[u'STRICT_TRANS_TABLES', u'STRICT_ALL_TABLES', u'NO_ZERO_IN_DATE',
u'NO_ZERO_DATE', u'ERROR_FOR_DIVISION_BY_ZERO', u'TRADITIONAL',
u'NO_AUTO_CREATE_USER', u'NO_ENGINE_SUBSTITUTION']
>>> from mysql.connector.constants import SQLMode
>>> cnx.sql_mode = [ SQLMode.NO_ZERO_DATE, SQLMode.REAL_AS_FLOAT]
>>> cnx.sql_mode
u'REAL_AS_FLOAT,NO_ZERO_DATE'
10.2.48. Свойство MySQLConnection.time_zone
>>> cnx.time_zone = '+00:00'
>>> cursor = cnx.cursor()
>>> cursor.execute('SELECT NOW()') ; cursor.fetchone()
(datetime.datetime(2012, 6, 15, 11, 24, 36),)
>>> cnx.time_zone = '-09:00'
>>> cursor.execute('SELECT NOW()') ; cursor.fetchone()
(datetime.datetime(2012, 6, 15, 2, 24, 44),)
>>> cnx.time_zone
u'-09:00'
10.2.49. Свойство MySQLConnection.unix_socket
10.2.50. Свойство MySQLConnection.user
10.3 pooling.MySQLConnectionPool
10.3.1. Конструктор pooling.MySQLConnectionPool
MySQLConnectionPool(pool_name=None, pool_size=5,
pool_reset_session=True, **kwargs)
pool_name
:
Название пула. Если этот аргумент не дан, Connector/Python
автоматически производит имя, составленное из значений
host
, port
,
user
и database
в kwargs
, именно в этом порядке.pool_name
, должно создать каждый
пул с отличным именем.pool_size
: Размер пула.
Если этот аргумент не дан, умолчание равняется 5.pool_reset_session
:
Перезагрузить ли переменные сеанса, когда связь возвращена в пул.
Этот аргумент был добавлен в Connector/Python 1.1.5.
До 1.1.5 переменные сеанса не перезагружаются.kwargs
: Дополнительные аргументы
соединения, как описано в
разделе 7.1.
dbconfig = {
"database": "test",
"user": "joe",
}
cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
pool_size = 3,
**dbconfig)
10.3.2. Метод MySQLConnectionPool.add_connection()
cnxpool.add_connection(cnx = None)
MySQLConnection
в пул или поднимает исключение
PoolError
, если пул полон.cnx
:
Объект MySQLConnection
, который будет добавлен к
пулу. Если этот аргумент отсутствует, пул создает новую
связь и добавляет его.
cnxpool.add_connection()# add new connection to pool
cnxpool.add_connection(cnx) # add existing connection to pool
10.3.3. Метод MySQLConnectionPool.get_connection()
cnxpool.get_connection()
PoolError
, если никакие связи недоступны.
cnx = cnxpool.get_connection()
10.3.4. Метод MySQLConnectionPool.set_config()
cnxpool.set_config(**kwargs)
kwargs
: Аргументы соединения.
dbconfig = {
"database": "performance_schema",
"user": "admin",
"password": "
password
",
}
cnxpool.set_config(**dbconfig)
10.3.5. Свойство MySQLConnectionPool.pool_name
cnxpool.pool_name
name = cnxpool.pool_name
10.4. pooling.PooledMySQLConnection
MySQLConnectionPool
,
чтобы возвратить объединенный экземпляр связи. Это также класс, используемый
для связей, полученных вызовом метода connect()
,
который вызывает пул связи (см.
раздел 9.1).PooledMySQLConnection
подобны
необъединенным объектам связи MySQLConnection
с этими различиями:close()
так же, как для любой
необъединенной связи. Однако для объединенной связи
close()
на самом деле не закрывает связь, а
возвращает ее в пул и делает доступной для последующих запросов связи.
config()
. Изменения связи должны быть сделаны
через сам объект пула, как описано в
разделе 9.1.
pool_name
, которое возвращает название пула.
10.4.1. Конструктор pooling.PooledMySQLConnection
PooledMySQLConnection(cnxpool, cnx)
MySQLConnectionPool
.cnxpool
: Экземпляр
MySQLConnectionPool
.cnx
: Экземпляр
MySQLConnection
.
pcnx = mysql.connector.pooling.PooledMySQLConnection(cnxpool, cnx)
10.4.2. Метод PooledMySQLConnection.close()
cnx.close()
close()
на самом деле не закрывает ее, а возвращает ее в пул и делает доступной
для последующих запросов связи.
10.4.3. Метод PooledMySQLConnection.config()
config()
поднимает
исключение PoolError
.
Конфигурация для объединенных связей должна быть реализована,
используя объект пула.
10.4.4. Свойство PooledMySQLConnection.pool_name
cnx.pool_name
cnx = cnxpool.get_connection()
name = cnx.pool_name
10.5. cursor.MySQLCursor
MySQLCursor
порождает
объекты, которые могут выполнить операции, такие как SQL-операторы.
Объекты курсора взаимодействуют с сервером MySQL, используя объект
MySQLConnection
.cursor()
объекта связи:
import mysql.connector
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor()
MySQLCursor
.
Чтобы создать курсор одного из этих типов, передайте соответствующие
аргументы cursor()
:MySQLCursorBuffered
создает буферизированный курсор. Посмотрите
раздел 10.6.1
.
cursor = cnx.cursor(buffered=True)
MySQLCursorRaw
создает сырой курсор. Посмотрите
раздел 10.6.2.
cursor = cnx.cursor(raw=True)
MySQLCursorBufferedRaw
создает буферизированный сырой курсор. Посмотрите
раздел 10.6.3
.
cursor = cnx.cursor(raw=True, buffered=True)
MySQLCursorDict
создает курсор, который возвращает строки как словари. Посмотрите
раздел 10.6.4.
cursor = cnx.cursor(dictionary=True)
MySQLCursorBufferedDict
создает буферизированный курсор, который возвращает строки как словари.
Посмотрите
раздел 10.6.5.
cursor = cnx.cursor(dictionary=True, buffered=True)
MySQLCursorNamedTuple
создает курсор, который возвращает строки как названные кортежами. Посмотрите
раздел 10.6.6
.
cursor = cnx.cursor(named_tuple=True)
MySQLCursorBufferedNamedTuple
создает буферизированный курсор, который возвращает строки как
названные кортежами. Посмотрите
раздел 10.6.7.
cursor = cnx.cursor(named_tuple=True, buffered=True)
MySQLCursorPrepared
создает курсор для выполнения подготовленных запросов. Посмотрите
раздел 10.6.8
.
cursor = cnx.cursor(prepared=True)
10.5.1. Конструктор cursor.MySQLCursor
MySQLConnection
cursor()
используется, чтобы создать объект
MySQLCursor
:
import mysql.connector
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor()
MySQLConnection
к
MySQLCursor
:
import mysql.connector
from mysql.connector.cursor
import MySQLCursor
cnx = mysql.connector.connect(database='world')
cursor = MySQLCursor(cnx)
execute()
поднимает исключение.
10.5.2. Метод MySQLCursor.callproc()
result_args = cursor.callproc(proc_name, args=())
proc_name
. Последовательность параметров
args
должна содержать одну запись для каждого
аргумента, который процедура ожидает.
callproc()
возвращает измененную копию входной
последовательности. Входные параметры оставляют нетронутыми.
Вывод и параметры ввода/вывода могут быть заменены новыми значениями.stored_results()
.
CREATE PROCEDURE multiply(IN pFac1 INT, IN pFac2 INT, OUT pProd INT)
BEGIN
SET pProd := pFac1 * pFac2;
END;
multiply()
:
>>> args = (5, 6, 0) # 0 is to hold value of the OUT parameter pProd
>>> cursor.callproc('multiply', args)
('5', '6', 30L)
sp1()
имеет это определение:
CREATE PROCEDURE sp1(IN pStr1 VARCHAR(20), IN pStr2 VARCHAR(20),
OUT pConCat VARCHAR(100))
BEGIN
SET pConCat := CONCAT(pStr1, pStr2);
END;
OUT
:
args = ('ham', 'eggs', (0, 'CHAR'))
result_args = cursor.callproc('sp1', args)
print(result_args[2])
10.5.3. Метод MySQLCursor.close()
cursor.close()
10.5.4. Метод MySQLCursor.execute()
cursor.execute(operation, params=None, multi=False)
iterator = cursor.execute(operation, params=None, multi=True)
operation
с базой данных.
Параметры найдены в кортеже или словаре params
и связаны с переменными в операции. Определите использование переменных
в стиле параметров %s
или
%(
(то есть, используя стиль name
)sformat
или
pyformat
).
execute()
возвращает итератор, если
multi
= True
.execute()
:
insert_stmt = (
"INSERT INTO employees (emp_no, first_name, last_name, hire_date) "
"VALUES (%s, %s, %s, %s)"
)
data = (2, 'Jane', 'Doe', datetime.date(2012, 3, 23))
cursor.execute(insert_stmt, data)
select_stmt = "SELECT * FROM employees WHERE emp_no = %(emp_no)s"
cursor.execute(select_stmt, { 'emp_no': 2 })
datetime.date()
преобразовывается в
'2012-03-23'
.multi
=
True
, execute()
в состоянии выполнить многочисленные запросы, определенные в
operation
. Это возвращает итератор, который
позволяет обработать результат каждого запроса. Однако использование
параметров не работает хорошо в этом случае, и обычно хорошая идея выполнить
каждый запрос самостоятельно.execute()
и показывает
результат каждого запроса:
operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
print("Rows produced by statement '{}':".format(
result.statement))
print(result.fetchall())
else:
print("Number of rows affected by statement '{}': {}".format(
result.statement, result.rowcount))
10.5.5. Метод MySQLCursor.executemany()
cursor.executemany(operation, seq_of_params)
operation
для базы данных
и выполняет его для всех последовательностей параметра или отображений,
найденных в последовательности seq_of_params
.executemany()
повторяет последовательность параметров, каждый раз передавая текущие
параметры к методу execute()
.
data = [
('Jane', date(2005, 2, 12)),
('Joe', date(2006, 5, 23)),
('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
cursor.executemany(stmt, data)
INSERT
:
INSERT INTO employees (first_name, hire_date)
VALUES ('Jane', '2005-02-12'), ('Joe', '2006-05-23'),
('John', '2010-10-03')
executemany()
невозможно определить многочисленные запросы, чтобы выполнить в параметре
operation
. Выполнение этого поднимает
исключение InternalError
.
Рассмотрите использование execute()
с
multi=True
.
10.5.6. Метод MySQLCursor.fetchall()
rows = cursor.fetchall()
>>> cursor.execute("SELECT * FROM employees ORDER BY emp_no")
>>> head_rows = cursor.fetchmany(size=2)
>>> remaining_rows = cursor.fetchall()
10.5.7. Метод MySQLCursor.fetchmany()
rows = cursor.fetchmany(size=1)
size
, который по умолчанию 1. Меньше строк
возвращено, если меньше строк доступно, чем указано.
10.5.8. Метод MySQLCursor.fetchone()
row = cursor.fetchone()
None
,
если больше строк недоступно. По умолчанию возвращенный кортеж состоит из
данных, возвращенных сервером MySQL, преобразованных в объекты Python.
Если курсор сырой, никакое преобразование не происходит, посмотрите
раздел 10.6.2.fetchone()
используется
fetchall()
и fetchmany()
. Это также используется, когда курсор используется в качестве итератора.
fetchone()
в цикле
while
, второе использование
курсора как итератора:
# Using a while loop
cursor.execute("SELECT * FROM employees")
row = cursor.fetchone()
while row is not None:
print(row)
row = cursor.fetchone()
# Using the cursor as iterator
cursor.execute("SELECT * FROM employees")
for row in cursor:
print(row)
10.5.9. Метод MySQLCursor.fetchwarnings()
tuples = cursor.fetchwarnings()
get_warnings
.SELECT
, который производит предупреждение:
>>> cnx.get_warnings = True
>>> cursor.execute("SELECT 'a'+1")
>>> cursor.fetchall()
[(1.0,)]
>>> cursor.fetchwarnings()
[(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
raise_on_warnings
.
10.5.10. Метод MySQLCursor.stored_results()
iterator = cursor.stored_results()
stored_results()
, чтобы получить их:
>>> cursor.callproc('myproc')
()
>>> for result in cursor.stored_results():
... print result.fetchall()
...
[(1,)]
[(2,)]
10.5.11. Свойство MySQLCursor.column_names
sequence = cursor.column_names
column_names
:
cursor.execute("SELECT last_name, first_name, hire_date "
"FROM employees WHERE emp_no = %s", (123,))
row = dict(zip(cursor.column_names, cursor.fetchone()))
print("{last_name}, {first_name}: {hire_date}".format(row))
10.5.12. Свойство MySQLCursor.description
tuples = cursor.description
(column_name,
type,
None,
None,
None,
None,
null_ok,
column_flags)
description
:
import mysql.connector
from mysql.connector import FieldType
...
cursor.execute("SELECT emp_no, last_name, hire_date "
"FROM employees WHERE emp_no = %s", (123,))
for i in range(len(cursor.description)):
print("Column {}:".format(i+1))
desc = cursor.description[i]
print("column_name = {}".format(desc[0]))
print("type = {} ({})".format(desc[1], FieldType.get_info(desc[1])))
print("null_ok = {}".format(desc[6]))
print("column_flags = {}".format(desc[7]))
Column 1:
column_name = emp_no
type = 3 (LONG)
null_ok = 0
column_flags = 20483
Column 2:
column_name = last_name
type = 253 (VAR_STRING)
null_ok = 0
column_flags = 4097
Column 3:
column_name = hire_date
type = 10 (DATE)
null_ok = 0
column_flags = 4225
column_flags
это экземпляр класса
constants.FieldFlag
.
Чтобы видеть, как интерпретировать его, сделайте это:
>>> from mysql.connector import FieldFlag
>>> FieldFlag.desc
10.5.13. Свойство MySQLCursor.lastrowid
id = cursor.lastrowid
AUTO_INCREMENT
последним
INSERT
или
UPDATE
, или
None
, когда нет такого доступного значения.
Например, если вы скомандуете
INSERT
на таблице, которая содержит
столбец AUTO_INCREMENT
,
lastrowid
вернет значение
AUTO_INCREMENT
для новой строки.
Для примера посмотрите
раздел 5.3
.lastrowid
похоже на функцию C API
mysql_insert_id()
, см.
mysql_insert_id().
10.5.14. Свойство MySQLCursor.rowcount
count = cursor.rowcount
SELECT
или количество строк,
затронутых запросами DML, например,
INSERT
или
UPDATE
. Для примера посмотрите
раздел 10.5.4
.rowcount
аналогично функции C API
mysql_affected_rows()
, см.
mysql_affected_rows().
10.5.15. Свойство MySQLCursor.statement
str = cursor.statement
statement
может быть полезно для отладки и показа, что послали в сервер MySQL.execute()
с
multi=True
. В этом случае свойство
statement
содержит всю последовательность
запросов и вызов execute()
вернет итератор,
который может использоваться, чтобы обработать следствия отдельных запросов.
Свойство statement
для этого итератора
показывает последовательности запроса для отдельных запросов.
10.5.16. Свойство MySQLCursor.with_rows
boolean = cursor.with_rows
True
или False
, чтобы указать, произвела ли последний
раз выполненная операция строки.with_rows
полезно, когда необходимо
определить, производит ли запрос набор результатов и получить строки.
Следующий пример получает строки, возвращенные
SELECT
, но
только затронутые строки оцениваются для
UPDATE
:
import mysql.connector
cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor()
operation = 'SELECT 1; UPDATE t1 SET c1 = 2; SELECT 2'
for result in cursor.execute(operation, multi=True):
if result.with_rows:
result.fetchall()
else:
print("Number of affected rows: {}".format(result.rowcount))
10.6. Субклассы cursor.MySQLCursor
MySQLCursor
, который описан в
разделе 10.5.
10.6.1. Класс cursor.MySQLCursorBuffered
MySQLCursorBuffered
наследует от
MySQLCursor
.MySQLCursorBuffered
получает весь набор
результатов от сервера и буферизует строки.fetchone()
, вернут
строки из набора буферизированных строк. Для небуферизированных курсоров
строки не получены от сервера, пока метод, получающий строки, не вызывают.
В этом случае, несомненно, необходимо будет получить все строки набора
результатов прежде, чем выполнить любые другие запросы на той же самой связи,
или будет поднято исключение InternalError
(Unread result found).MySQLCursorBuffered
может быть полезным в
ситуациях, где многократные запросы с небольшими наборами результатов должны
быть объединены или вычислены друг с другом.buffered
, вызывая метод связи
cursor()
.
Альтернативно, чтобы сделать все курсоры, созданные из связи, буферизованными
по умолчанию, используйте
параметр связи buffered
.
import mysql.connector
cnx = mysql.connector.connect()
# Only this particular cursor will buffer results
cursor = cnx.cursor(buffered=True)
# All cursors created from cnx2 will be buffered by default
cnx2 = mysql.connector.connect(buffered=True)
10.6.2. Класс cursor.MySQLCursorRaw
MySQLCursorRaw
унаследован от
MySQLCursor
.MySQLCursorRaw
пропускает преобразование от типов данных MySQL до типов Python,
когда получает строки. Сырой курсор обычно используется, чтобы получить
лучшую производительность или когда вы хотите сделать преобразование сами.raw
, вызывая метод связи
cursor()
. Альтернативно, чтобы сделать все
курсоры, созданные из связи, сырыми по умолчанию, используйте
параметр связи
raw
.
import mysql.connector
cnx = mysql.connector.connect()
# Only this particular cursor will be raw
cursor = cnx.cursor(raw=True)
# All cursors created from cnx2 will be raw by default
cnx2 = mysql.connector.connect(raw=True)
10.6.3. Класс cursor.MySQLCursorBufferedRaw
MySQLCursorBufferedRaw
унаследован от
MySQLCursor
.MySQLCursorBufferedRaw
похож на
MySQLCursorRaw
, но буферизован: после
выполнения запроса это получает весь набор результатов от сервера и
буферизует строки. Для получения информации о последствиях буферизования
посмотрите
раздел 10.6.1.raw
и параметр
buffered
, когда вызываете метод соединения
cursor()
.
Альтернативно, чтобы сделать все курсоры созданными сырыми
и буферизованными по умолчанию, используйте
параметры соединения
raw
и buffered
.
import mysql.connector
cnx = mysql.connector.connect()
# Only this particular cursor will be raw and buffered
cursor = cnx.cursor(raw=True, buffered=True)
# All cursors created from cnx2 will be raw and buffered by default
cnx2 = mysql.connector.connect(raw=True, buffered=True)
10.6.4. Класс cursor.MySQLCursorDict
MySQLCursorDict
унаследован от
MySQLCursor
.
Этот класс доступен с Connector/Python 2.0.0.MySQLCursorDict
возвращает каждую строку как словарь. Ключи для каждого объекта словаря это
имена столбцов результата MySQL.
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(dictionary=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")
print("Countries in Europe:")
for row in cursor:
print("* {Name}".format(Name=row['Name']
Countries in Europe:
* Albania
* Andorra
* Austria
* Belgium
* Bulgaria
...
format()
:
cursor.execute("SELECT Name, Population FROM country
WHERE Continent = 'Europe'")
print("Countries in Europe with population:")
for row in cursor:
print("* {Name}: {Population}".format(**row))
10.6.5. Класс cursor.MySQLCursorBufferedDict
MySQLCursorBufferedDict
унаследован от
MySQLCursor
.
Этот класс доступен с Connector/Python 2.0.0.MySQLCursorBufferedDict
аналогичен
MySQLCursorDict
, но буферизован: после
выполнения запроса это получает весь набор результатов от сервера и
буферизует строки. Для получения информации о последствиях буферизования
посмотрите
раздел 10.6.1.buffered
, создлавая
новый курсор словаря:
cursor = cnx.cursor(dictionary=True, buffered=True)
10.6.6. Класс cursor.MySQLCursorNamedTuple
MySQLCursorNamedTuple
унаследован от
MySQLCursor
.
Этот класс доступен с Connector/Python 2.0.0.MySQLCursorNamedTuple
возвращает каждую строку как названный кортеж. Признаки для каждого объекта
названного кортежа это имена столбцов результата MySQL.
cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(named_tuple=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")
print("Countries in Europe with population:")
for row in cursor:
print("* {Name}: {Population}".format(Name=row.Name,
Population=row.Population))
10.6.7. Класс cursor.MySQLCursorBufferedNamedTuple
MySQLCursorBufferedNamedTuple
унаследован от
MySQLCursor
.
Этот класс доступен с Connector/Python 2.0.0.MySQLCursorBufferedNamedTuple
аналогичен
MySQLCursorNamedTuple
, но буферизован: после
выполнения запроса это получает весь набор результатов от сервера и
буферизует строки. Для получения информации о последствиях буферизования
посмотрите
раздел 10.6.1.buffered
при создании
нового курсора названного кортежа:
cursor = cnx.cursor(named_tuple=True, buffered=True)
10.6.8. Класс cursor.MySQLCursorPrepared
MySQLCursorPrepared
унаследован от
MySQLCursor
.PREPARE
и
EXECUTE
.
Для получения информации о протоколе двоичной синхронной передачи данных см.
C API Prepared Statements.cursor()
объекта связи возвращает объект
MySQLCursorPrepared
:prepared=True
метода
cursor()
.
Этот синтаксис доступен с Connector/Python 1.1.2.
import mysql.connector
cnx = mysql.connector.connect(database='employees')
cursor = cnx.cursor(prepared=True)
MySQLCursorPrepared
, используя аргумент
cursor_class
метода
cursor()
.
Этот синтаксис доступен с Connector/Python 1.1.0.
import mysql.connector
from mysql.connector.cursor import MySQLCursorPrepared
cnx = mysql.connector.connect(database='employees')
cursor = cnx.cursor(cursor_class=MySQLCursorPrepared)
MySQLCursorPrepared
, работает так:execute()
курсора, это готовит запрос.
Для последующих вызовов execute()
фаза подготовки пропускается, если запрос тот же самыйexecute()
берет дополнительный
второй аргумент, содержащий список значений данных, чтобы связать с маркерами
параметра в запросе. Если аргумент списка присутствует, должно быть одно
значение на маркер параметра.
cursor = cnx.cursor(prepared=True)
stmt = "SELECT fullname FROM employees WHERE id = %s" # (1)
cursor.execute(stmt, (5,))# (2)
# ... fetch data ...
cursor.execute(stmt, (10,)) # (3)
# ... fetch data ...
%s
в рамках запроса это
маркер параметра. Не помещайте отметки цитаты вокруг маркеров параметра.
execute()
курсор готовит запрос. Если данные даны в том же самом вызове, они также
выполняют запрос и необходимо получить данные.execute()
,
который передает тот же самый SQL-оператор, курсор пропускает фазу подготовки.
MySQLCursorPrepared
, могут использовать стиль
параметров format
(%s
) или
qmark
(?
).
Это отличается от неподготовленных запросов, выполненных с
MySQLCursor
, которые могут использовать стиль
параметров format
или
pyformat
.MySQLCursorPrepared
.COM_STMT_SEND_LONG_DATA
.
Чтобы использовать это из скрипта Connector/Python,
пошлите параметр в запросе, используя интерфейс
IOBase
. Пример:
from io import IOBase
...
cur = cnx.cursor(prepared=True)
cur.execute("SELECT (%s)", (io.BytesIO(bytes("A", "latin1")), ))
10.7. Класс constants.ClientFlag
ClientFlag
доступен, импортируя
mysql.connector
.
>>> import mysql.connector
>>> mysql.connector.ClientFlag.FOUND_ROWS
2
client_flag
.ClientFlag
не может создавать экземпляры.
10.8. Класс constants.FieldType
from __future__ import print_function
import mysql.connector
from mysql.connector import FieldType
cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor()
cursor.execute("SELECT DATE(NOW()) AS `c1`, TIME(NOW()) AS `c2`, "
"NOW() AS `c3`, 'a string' AS `c4`, 42 AS `c5`")
rows = cursor.fetchall()
for desc in cursor.description:
colname = desc[0]
coltype = desc[1]
print("Column {} has type {}".format(colname, FieldType.get_info(coltype)))
cursor.close()
cnx.close()
FieldType
не может создавать экземпляры.
10.9. Класс constants.SQLMode
sql_mode
, см.
раздел
10.2.47.SQLMode
не может создавать экземпляры.
10.10. Класс constants.CharacterSet
CharacterSet
не может создавать экземпляры.
10.11. Класс constants.RefreshOption
RefreshOption.GRANT
FLUSH PRIVILEGES
.RefreshOption.LOG
FLUSH LOGS
.RefreshOption.TABLES
FLUSH TABLES
.RefreshOption.HOSTS
FLUSH HOSTS
.RefreshOption.STATUS
FLUSH STATUS
.RefreshOption.THREADS
RefreshOption.SLAVE
RESET SLAVE
.
10.12. Ошибки и исключения
mysql.connector.errors
определяет
классы исключений для ошибок и предупреждений, поднятых MySQL
Connector/Python. Большинство классов, определенных в этом модуле, доступно,
когда вы импортируете mysql.connector
.DatabaseError
.
Класс SQLSTATE
Исключение Connector/Python 02
DataError
02
DataError
07
DatabaseError
08
OperationalError
0A
NotSupportedError
21
DataError
22
DataError
23
IntegrityError
24
ProgrammingError
25
ProgrammingError
26
ProgrammingError
27
ProgrammingError
28
ProgrammingError
2A
ProgrammingError
2B
DatabaseError
2C
ProgrammingError
2D
DatabaseError
2E
DatabaseError
33
DatabaseError
34
ProgrammingError
35
ProgrammingError
37
ProgrammingError
3C
ProgrammingError
3D
ProgrammingError
3F
ProgrammingError
40
InternalError
42
ProgrammingError
44
InternalError
HZ
OperationalError
XA
IntegrityError
0K
OperationalError
HY
DatabaseError
10.12.1. Модуль errorcode
>>> from mysql.connector import errorcode
>>> errorcode.ER_BAD_TABLE_ERROR
1051
10.12.2. Исключение errors.Error
errors
. Это может использоваться, чтобы
зафиксировать все ошибки в одном запросе except
.
import mysql.connector
try:
cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()
cursor.execute("SELECT * FORM employees") # Syntax error in query
cnx.close()
except mysql.connector.Error as err:
print("Something went wrong: {}".format(err))
msg
,
errno
, values
и sqlstate
. Все они дополнительные и по
умолчанию None
.
errors.Error
внутренне используется
Connector/Python, чтобы поднять ошибки клиент-сервера MySQL и не должен
использоваться вашим приложением, чтобы поднять исключения.
>>> from mysql.connector.errors import Error
>>> str(Error())
'Unknown error'
>>> str(Error("Oops! There was an error."))
'Oops! There was an error.'
>>> str(Error(errno=2006))
'2006: MySQL server has gone away'
>>> str(Error(errno=2002, values=('/tmp/mysql.sock', 2)))
"2002: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (2)"
>>> str(Error(errno=1146, sqlstate='42S02',
msg="Table 'test.spam' doesn't exist"))
"1146 (42S02): Table 'test.spam' doesn't exist"
Error
.Error
может быть инициализирован, используя ранее упомянутые аргументы.
Кроме того, у каждого экземпляра есть атрибуты
errno
, msg
и
sqlstate
, которые могут
использоваться в вашем коде.DROP TABLE
не включает
IF EXISTS
):
import mysql.connector
from mysql.connector import errorcode
cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor()
try:
cursor.execute("DROP TABLE spam")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_BAD_TABLE_ERROR:
print("Creating table spam")
else:
raise
errors.Error()
,
не сохранено так, чтобы это могло быть прочитано. Вместо этого атрибут
Error.msg
был отформатирован со значением
SQLSTATE и кодом ошибки. С 1.1.1 только исходное сообщение сохраняется в
атрибуте Error.msg
.
Отформатированное значение вместе с кодом ошибки и значением SQLSTATE может
быть получено, печатая или получая строковое представление
ошибочного объекта. Пример:
try:
conn = mysql.connector.connect(database = "baddb")
except mysql.connector.Error as e:
print "Error code:", e.errno# error number
print "SQLSTATE value:", e.sqlstate # SQLSTATE value
print "Error message:", e.msg # error message
print "Error:", e # errno, sqlstate, msg values
s = str(e)
print "Error:", s # errno, sqlstate, msg values
errors.Error
это подкласс Python
StandardError
.
10.12.3. Исключение errors.DataError
NULL
, когда
это не может быть NULL
, выход значения
из диапазона для столбца, деление на нуль, количество столбцов не
соответствует количеству значений и т.д.errors.DataError
это подкласс
errors.DatabaseError
.
10.12.4. Исключение errors.DatabaseError
errors.DatabaseError
это подкласс
errors.Error
.
10.12.5. Исключение errors.IntegrityError
cursor.execute("CREATE TABLE t1 (id int, PRIMARY KEY (id))")
try:
cursor.execute("INSERT INTO t1 (id) VALUES (1)")
cursor.execute("INSERT INTO t1 (id) VALUES (1)")
except mysql.connector.IntegrityError as err:
print("Error: {}".format(err))
errors.IntegrityError
это подкласс
errors.DatabaseError
.
10.12.6. Исключение errors.InterfaceError
errors.InterfaceError
это подкласс
errors.Error
.
10.12.7. Исключение errors.InternalError
errors.InternalError
это подкласс
errors.DatabaseError
.
10.12.8. Исключение errors.NotSupportedError
errors.NotSupportedError
это подкласс
errors.DatabaseError
.
10.12.9. errors.OperationalError
errors.OperationalError
это подкласс
errors.DatabaseError
.
10.12.10. Исключение errors.PoolError
errors.PoolError
это подкласс
errors.Error
.
10.12.11. Исключение errors.ProgrammingError
try:
cursor.execute("CREATE DESK t1 (id int, PRIMARY KEY (id))")
except mysql.connector.ProgrammingError as err:
if err.errno == errorcode.ER_SYNTAX_ERROR:
print("Check your syntax!")
else:
print("Error: {}".format(err))
errors.ProgrammingError
это подкласс
errors.DatabaseError
.
10.12.12. Исключение errors.Warning
errors.Warning
это подкласс Python
StandardError
.
10.12.13. Функция errors.custom_error_exception()
errors.custom_error_exception(error=None, exception=None)
error
это номер ошибки MySQL Server,
необходимо также передать класс exception
.
Аргумент error
может быть словарем, в этом
случае ключ это код ошибки сервера, а значение это класс исключения,
которое будет поднято.
import mysql.connector
from mysql.connector import errorcode
# Server error 1028 should raise a DatabaseError
mysql.connector.custom_error_exception(1028, mysql.connector.DatabaseError)
# Or using a dictionary:
mysql.connector.custom_error_exception({
1028: mysql.connector.DatabaseError,
1029: mysql.connector.OperationalError,
})
# To reset, pass an empty dictionary:
mysql.connector.custom_error_exception({})
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.