Spec-Zone.ru › MySQL Connectors 1.0

7.1 Аргументы подключения Connector/Python

Подключение к серверу MySQL можно установить, используя либо функцию mysql.connector.connect(), либо класс mysql.connector.MySQLConnection():

cnx = mysql.connector.connect(user='joe', database='test')
cnx = MySQLConnection(user='joe', database='test')

В следующей таблице описаны аргументы, которые можно использовать для инициализации подключения. Звездочка (*) после аргумента указывает на синонимичное имя аргумента, доступное только для совместимости с другими драйверами MySQL для Python. Oracle рекомендует не использовать эти альтернативные имена.

Таблица 7.1 Аргументы подключения для Connector/Python

Таблица 7.1 Аргументы подключения для Connector/Python
Имя аргумента По умолчанию Описание
user (username*) Имя пользователя, используемое для аутентификации на сервере MySQL.
password (passwd*) Пароль для аутентификации пользователя на сервере MySQL.
password1, password2, и password3 Для многофакторной аутентификации (MFA); password1 является псевдонимом для password. Добавлено в 8.0.28.
database (db*) Имя базы данных для использования при подключении к серверу MySQL.
host 127.0.0.1 Имя хоста или IP-адрес сервера MySQL.
unix_socket Расположение файла Unix-сокет.
port 3306 TCP/IP порт сервера MySQL. Должно быть целым числом.
conn_attrs

Стандартные значения performance_schema.session_connect_attrs отправляются; используйте conn_attrs для опциональной установки дополнительных пользовательских атрибутов подключения, определённых как словарь, например, config['conn_attrs'] = {"foo": "bar"}.

Реализации c-ext и pure python отличаются. Реализация c-ext зависит от библиотеки mysqlclient, поэтому её стандартные значения conn_attrs берутся из неё. Например, '_client_name' — это 'libmysql' с c-ext, но 'mysql-connector-python' с pure python. C-ext добавляет следующие дополнительные атрибуты: '_connector_version', '_connector_license', '_connector_name' и '_source_host'.

Этот параметр был добавлен в 8.0.17, как и поведение по умолчанию session_connect_attrs.

init_command Команда (SQL-запрос), выполняемая сразу после установления подключения в рамках процесса инициализации. Добавлено в 8.0.32.
auth_plugin Плагин аутентификации для использования. Добавлено в 1.2.1.
fido_callback

Устарел с версии 8.2.0 и удалён в 8.4.0; вместо этого используйте webauthn_callback.

Вызываемый объект, определённый необязательным параметром fido_callback, выполняется, когда он готов к взаимодействию пользователя с устройством аппаратного FIDO. Этот параметр может быть вызываемым объектом или строковым путём, который коннектор может импортировать и выполнить во время выполнения. Он не блокирует выполнение и используется только для уведомления пользователя о необходимости взаимодействия с устройством аппаратного FIDO.

Эта функциональность была доступна только в расширении C. При использовании чистой реализации Python генерировалась ошибка NotSupportedError.

webauthn_callback

Вызываемый объект, определённый необязательным параметром webauthn_callback, выполняется, когда он готов к взаимодействию пользователя с аппаратным устройством WebAuthn. Этот параметр может быть вызываемым объектом или строковым путём, который коннектор может импортировать и выполнить во время выполнения. Он не блокирует выполнение и используется только для уведомления пользователя о необходимости взаимодействия с аппаратным устройством FIDO. Для использования включите плагин аутентификации authentication_webauthn_client в конфигурации подключения.

Этот параметр был добавлен в 8.2.0, и он заменил параметр fido_callback, который был удалён в версии 8.4.0.

openid_token_file Путь к файлу, содержащему токен идентификации в формате OpenID JWT. Добавлено в 9.1.0.
use_unicode True Использовать Unicode.
charset utf8mb4 Используемый набор символов MySQL.
collation utf8mb4_general_ai_ci (является utf8_general_ci в 2.x Используемый порядок сортировки MySQL. Значения по умолчанию для 8.x генерируются из последних значений по умолчанию сервера MySQL 8.0.
autocommit False Использовать транзакции.
time_zone Установить переменную сеанса time_zone во время подключения.
sql_mode Установить переменную сеанса sql_mode во время подключения.
get_warnings False Получать предупреждения.
raise_on_warnings False Выбрасывать исключение при возникновении предупреждений.
connection_timeout (connect_timeout*) Таймаут для TCP и Unix-сокет подключений.
read_timeout None Предельное время ожидания ответа от сервера перед выбросом ошибки уровня ReadTimeoutError. Значение по умолчанию (None) устанавливает время ожидания неограниченно. Параметр добавлен в 9.2.0.
write_timeout None Предельное время отправки данных на сервер перед выбросом ошибки уровня WriteTimeoutError. Значение по умолчанию (None) устанавливает время ожидания неограниченно. Параметр добавлен в 9.2.0.
client_flags Флаги клиента MySQL.
buffered False Курсоры объектов извлекают результаты сразу после выполнения запросов.
raw False Результаты MySQL возвращаются в исходном виде, а не преобразуются в типы Python.
consume_results False Автоматически читать наборы результатов.
tls_versions ["TLSv1.2", "TLSv1.3"] Поддерживаемые версии TLS; разрешены версии TLSv1.2 и TLSv1.3. Версии TLSv1 и TLSv1.1 были удалены в Connector/Python 8.0.28.
ssl_ca Файл с сертификатами центра сертификации SSL.
ssl_cert Файл с сертификатом SSL.
ssl_disabled False True отключает использование SSL/TLS. Протоколы подключения TLSv1 и TLSv1.1 устарели с Connector/Python 8.0.26 и удалены с Connector/Python 8.0.28.
ssl_key Файл с ключом SSL.
ssl_verify_cert False При установке в True, проверяет сертификат сервера по отношению к файлу сертификата, указанному в параметре ssl_ca. Любое несовпадение приводит к исключению ValueError.
ssl_verify_identity False При установке в True дополнительно выполняет проверку идентификации имени хоста, сравнивая имя хоста, используемое клиентом для подключения к серверу, с идентификатором в сертификате, отправленном сервером клиенту. Параметр добавлен в Connector/Python 8.0.14.
force_ipv6 False При установке в True, использует IPv6, когда адрес разрешается как IPv4, так и IPv6. По умолчанию используется IPv4 в таких случаях.
kerberos_auth_mode SSPI Только для Windows, для выбора между SSPI и GSSAPI во время выполнения для плагина аутентификации authentication_kerberos_client на Windows. Параметр добавлен в Connector/Python 8.0.32.
oci_config_file ""

Дополнительно укажите путь к конкретному файлу конфигурации серверной аутентификации authentication_oci. Имя профиля можно настроить с помощью oci_config_profile.

Путь к файлу по умолчанию в Linux и macOS — ~/.oci/config, а в Windows — %HOMEDRIVE%%HOMEPATH%\.oci\config.

oci_config_profile "DEFAULT"

Используется для указания профиля для использования из файла конфигурации OCI, который содержит сгенерированную пару временных ключей и токен безопасности. Местоположение файла конфигурации OCI можно определить с помощью oci_config_file. Параметр oci_config_profile был добавлен в Connector/Python 8.0.33.

dsn Не поддерживается (выбрасывает NotSupportedError при использовании).
pool_name Имя пула подключений. Имя пула ограничено буквенно-цифровыми символами и специальными символами ., _, *, $ и #. Длина имени пула не должна превышать pooling.CNX_POOL_MAXNAMESIZE символов (по умолчанию 64).
pool_size 5 Размер пула подключений. Размер пула должен быть больше 0 и меньше или равен pooling.CNX_POOL_MAXSIZE (по умолчанию 32).
pool_reset_session True Сбрасывать переменные сеанса при возвращении подключения в пул.
compress False Использовать сжатый протокол клиент/сервер.
converter_class Класс преобразователя для использования.
converter_str_fallback False Включить преобразование типов значений, не поддерживаемых классом преобразователя Connector/Python или пользовательским классом преобразователя, в строковые значения.
failover Последовательность отказа сервера.
option_files Какие файлы параметров читать. Добавлено в 2.0.0.
option_groups ['client', 'connector_python'] Какие группы читать из файлов параметров. Добавлено в 2.0.0.
allow_local_infile True Включить. Добавлено в 2.0.0.
use_pure False по состоянию на 8.0.11 и True в более ранних версиях. Если доступна только одна реализация (C или Python), то значение по умолчанию устанавливается для активации доступной реализации. Использовать чистый Python или расширение C. Если use_pure=False, а расширение C недоступно, Connector/Python автоматически переключится на реализацию на чистом Python. Может быть установлено с помощью mysql.connector.connect(), но не с MySQLConnection.connect(). Добавлен в 2.1.1.
krb_service_principal "@realm" по умолчанию устанавливается в соответствии с настройками по умолчанию в файле krb5.conf. Должно быть строкой в формате "primary/instance@realm", например, "ldap/ldapauth@MYSQL.COM", где "@realm" необязательно. Добавлен в 8.0.23.

Параметры аутентификации MySQL

Аутентификация с MySQL обычно использует username и password.

При указании аргумента database текущая база данных устанавливается в указанное значение. Для изменения текущей базы данных позже выполните USE SQL-запрос или установите свойство database экземпляра MySQLConnection.

По умолчанию Connector/Python пытается подключиться к серверу MySQL, работающему на локальном хосте, используя TCP/IP. Аргумент host по умолчанию имеет значение IP-адреса 127.0.0.1, а port — 3306. Unix-сокеты поддерживаются установкой unix_socket. Именные каналы на платформе Windows не поддерживаются.

Connector/Python поддерживает плагины аутентификации, доступные с MySQL 8.0, включая предпочтительный плагин аутентификации.

Поддерживается устаревший плагин, но он отключен по умолчанию с MySQL Server 8.4.0 и удален с MySQL Server 9.0.0.

Метод connect() поддерживает аргумент auth_plugin, который может быть использован для принудительного использования определённого плагина аутентификации.

Примечание

MySQL Connector/Python не поддерживает старые, менее безопасные протоколы паролей MySQL версии до 4.1.

Connector/Python поддерживает для аутентификации без пароля. Клиенты Linux поддерживаются с Connector/Python 8.0.26, а поддержка Windows была добавлена в Connector/Python 8.0.27 с реализацией расширения C и в Connector/Python 8.0.29 с реализацией на чистом Python. Для Windows соответствующий параметр подключения kerberos_auth_mode был добавлен в 8.0.32 для настройки режима либо SSPI (по умолчанию), либо GSSAPI (через реализацию на чистом Python или реализацию расширения C с 8.4.0). Хотя Windows поддерживает оба режима, Linux поддерживает только GSSAPI.

При необходимости используйте сокращение [gssapi] при установке пакета mysql-connector-python pip для включения определённых версий GSSAPI, как определено коннектором, что на данный момент (Connector/Python 9.1.0) составляет v1.8.3:

$ pip install mysql-connector-python[gssapi]

Следующий пример предполагает, что настроен для использования аутентификации GSSAPI/Kerberos SASL:

import mysql.connector as cpy
import logging

logging.basicConfig(level=logging.DEBUG)

SERVICE_NAME = "ldap"
LDAP_SERVER_IP = "server_ip or hostname"  # e.g., winexample01

config = {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "myuser@example.com",
    "password": "s3cret",
    "use_pure": True,
    "krb_service_principal": f"{SERVICE_NAME}/{LDAP_SERVER_IP}"
}

with cpy.connect(**config) as cnx:
    with cnx.cursor() as cur:
        cur.execute("SELECT @@version")
        res = cur.fetchone()
        print(res[0])

Connector/Python поддерживает многофакторную аутентификацию (MFA) с версии 8.0.28, используя параметры подключения password1 (псевдоним password), password2 и password3.

Connector/Python поддерживает с Connector/Python 8.2.0, что поддерживается в MySQL Enterprise Edition. При необходимости используйте параметр подключения Connector/Python webauthn_callback для уведомления пользователей о необходимости взаимодействия с аппаратным устройством. Эта функциональность присутствует в реализации на C (которая использует libmysqlclient), но реализация на чистом Python требует зависимости FIDO2, которая не предоставляется с MySQL-коннектором и предполагается уже присутствующей в вашей среде. Она может быть установлена независимо с помощью:

$> pip install fido2

Ранее поддерживаемый (сейчас удалённый с версии 8.4.0) authentication_fido плагин MySQL Server поддерживался с помощью параметра fido_callback, который был доступен в реализации расширения C.

Connector/Python поддерживает OpenID Connect с Connector/Python 9.1.0. Функциональность включена с помощью клиентского плагина аутентификации authentication_openid_connect_client, подключающегося к MySQL Enterprise Edition с плагином аутентификации authentication_openid_connect. Эти примеры включают плагин с auth_plugin и определяют расположение файла токена JWT с openid_token_file:

# Standard connection
import mysql.connector as cpy
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "openid_token_file": "{path-to-id-token-file}",
    "auth_plugin": "authentication_openid_connect_client",
    "use_pure": True, # Use False for C-Extension
}
with cpy.connect(**config) as cnx:
    with cnx.cursor() as cur:
        cur.execute("SELECT @@version")
        print(cur.fetchall())

# Or, using an async connection
import mysql.connector.aio as cpy_async
import asyncio
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "auth_plugin": "authentication_openid_connect_client",
    "openid_token_file": "{path-to-id-token-file}",
}
async def test():
    async with await cpy_async.connect(**config) as cnx:
        async with await cnx.cursor() as cur:
            await cur.execute("SELECT @@version")
            print(await cur.fetchall())
asyncio.run(test())

Кодировка символов

По умолчанию строки, полученные из MySQL, возвращаются как литералы Unicode Python. Для изменения этого поведения установите use_unicode в False. Вы можете изменить кодировку для подключения клиента с помощью аргумента charset. Для изменения кодировки после подключения к MySQL установите свойство charset экземпляра MySQLConnection. Этот метод предпочтительнее использования SET NAMES SQL-запроса непосредственно. Аналогично свойству charset, можно установить collation для текущей MySQL-сессии.

Транзакции

Значение autocommit по умолчанию равно False, поэтому транзакции не коммитируются автоматически. Вызовите метод commit() экземпляра MySQLConnection в вашем приложении после выполнения набора связанных операций вставки, обновления и удаления. Для обеспечения согласованности данных и высокой производительности операций записи рекомендуется оставить параметр конфигурации autocommit выключенным при использовании InnoDB или других транзакционных таблиц.

Временные зоны

Временная зона может быть установлена для каждого подключения с помощью аргумента time_zone. Это полезно, например, если сервер MySQL настроен на UTC, и значения TIMESTAMP должны возвращаться MySQL, преобразованные в временную зону PST.

SQL-режимы

MySQL поддерживает так называемые SQL-режимы, которые изменяют поведение сервера глобально или для каждого подключения. Например, для вывода предупреждений в виде ошибок, установите sql_mode в TRADITIONAL. Более подробная информация доступна в .

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

Предупреждения, сгенерированные запросами, извлекаются автоматически, когда get_warnings установлено в True. Вы также можете немедленно вызвать исключение, установив raise_on_warnings в True. Рассмотрите возможность использования настройки MySQL для преобразования предупреждений в ошибки.

Для установки значения таймаута для подключений используйте connection_timeout.

Включение и отключение функций с помощью флагов клиента

MySQL использует флаги клиента для включения или отключения функций. С помощью аргумента client_flags вы можете управлять настройками. Чтобы узнать какие флаги доступны, используйте следующее:

from mysql.connector.constants import ClientFlag
print '\n'.join(ClientFlag.get_full_info())

Если client_flags не указано (то есть равно нулю), используются значения по умолчанию для MySQL 4.1 и выше. Если вы указываете целое число большее, чем 0, убедитесь, что все флаги установлены корректно. Более удобный способ установки и отключения флагов по отдельности – использование списка. Например, для установки FOUND_ROWS, но отключения стандартного LONG_FLAG:

flags = [ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG]
mysql.connector.connect(client_flags=flags)

Обработка наборов результатов

По умолчанию MySQL Connector/Python не буферизует и не предварительно извлекает результаты. Это означает, что после выполнения запроса ваша программа отвечает за извлечение данных. Это предотвращает чрезмерное использование памяти при возврате запросами больших наборов результатов. Если вам известно, что набор результатов достаточно мал для обработки сразу, вы можете извлечь результаты немедленно, установив buffered в True. Также возможно настроить это значение для каждого курсора (см. Раздел 10.2.6, «Метод MySQLConnection.cursor()»).

Результаты, сгенерированные запросами, обычно не считываются, пока их не запросит программа-клиент. Для автоматического потребления и отбрасывания наборов результатов установите параметр consume_results в True. Результатом является чтение всех результатов, что для больших наборов результатов может быть медленным. (В этом случае может быть предпочтительнее закрыть и открыть соединение.)

Преобразования типов

По умолчанию типы MySQL в наборах результатов автоматически преобразуются в типы Python. Например, значение столбца DATETIME становится объектом datetime.datetime. Для отключения преобразования установите параметр raw в True. Вы можете сделать это для повышения производительности или для выполнения других типов преобразований самостоятельно.

Подключение через SSL

Использование SSL-соединений возможно, когда ваша установка Python поддерживает SSL, то есть когда она скомпилирована с библиотеками OpenSSL. При указании параметров ssl_ca, ssl_key и ssl_cert соединение переключается на SSL, а параметр client_flags включает значение ClientFlag.SSL автоматически. Вы можете использовать это в сочетании с параметром compressed, установленным в True.

С Connector/Python 2.2.2, если сервер MySQL поддерживает SSL-соединения, Connector/Python пытается установить защищённое (шифрованное) соединение по умолчанию, переходя к незащищённому соединению в противном случае.

С Connector/Python 1.2.1 по Connector/Python 2.2.1 возможно установить SSL-соединение, используя только параметр ssl_ca. Параметры ssl_key и ssl_cert являются необязательными. Однако, если любой из них указан, оба должны быть указаны, иначе будет генерироваться AttributeError.

# Note (Example is valid for Python v2 and v3)
from __future__ import print_function

import sys

#sys.path.insert(0, 'python{0}/'.format(sys.version_info[0]))

import mysql.connector
from mysql.connector.constants import ClientFlag

config = {
    'user': 'ssluser',
    'password': 'password',
    'host': '127.0.0.1',
    'client_flags': [ClientFlag.SSL],
    'ssl_ca': '/opt/mysql/ssl/ca.pem',
    'ssl_cert': '/opt/mysql/ssl/client-cert.pem',
    'ssl_key': '/opt/mysql/ssl/client-key.pem',
}

cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
print(cur.fetchone())
cur.close()
cnx.close()

Пулы подключений

При использовании аргументов pool_name или pool_size, Connector/Python создает новый пул. Если аргумент pool_name не указан, вызов connect() автоматически генерирует имя, составленное из аргументов подключения host, port, user и database в указанном порядке. Если аргумент pool_size не указан, по умолчанию размер пула составляет 5 подключений.

Аргумент pool_reset_session позволяет управлять тем, сбрасываются ли переменные сеанса при возвращении подключения в пул. По умолчанию они сбрасываются.

Дополнительную информацию о пулах подключений см. в разделе 9.5 «Connector/Python Connection Pooling».

Сжатие протокола

Логический аргумент compress указывает, использовать ли сжатый протокол клиент/сервер (по умолчанию False). Это предоставляет более простой способ, чем установка флага ClientFlag.COMPRESS. Этот аргумент доступен начиная с Connector/Python 1.1.2.

Класс конвертера

Аргумент converter_class принимает класс и устанавливает его при настройке подключения. Если пользовательский класс конвертера не является подклассом класса conversion.MySQLConverterBase, возникает исключение AttributeError.

Переключение серверов

Метод connect() принимает аргумент failover, который предоставляет информацию для переключения серверов в случае сбоев подключения. Значение аргумента — кортеж или список словарей (кортеж предпочтительнее, т.к. он неизменяемый). Каждый словарь содержит аргументы подключения для заданного сервера в последовательности переключения. Разрешенные значения словаря: user, password, host, port, unix_socket, database, pool_name, pool_size. Этот вариант переключения был добавлен в Connector/Python 1.2.1.

Поддержка файлов конфигурации

Начиная с Connector/Python 2.0.0, поддержка файлов конфигурации реализована с использованием двух вариантов для connect():

  • option_files: Какие файлы конфигурации читать. Значение может быть именем файла (строкой) или последовательностью имён файлов. По умолчанию Connector/Python не читает файлы конфигурации, поэтому этот аргумент должен быть указан явно для чтения файлов конфигурации. Файлы читаются в указанном порядке.

  • option_groups: Какие группы читать из файлов конфигурации, если они указаны. Значение может быть именем группы (строкой) или последовательностью имён групп. Если этот аргумент не указан, значение по умолчанию — ['client', 'connector_python'], для чтения групп [client] и [connector_python].

Более подробная информация содержится в разделе 7.2 «Connector/Python Option-File Support».

LOAD DATA LOCAL INFILE

До версии Connector/Python 2.0.0 пользователям приходилось явно устанавливать флаг ClientFlag.LOCAL_FILES для использования данной функции. Начиная с версии 2.0.0, этот флаг включен по умолчанию. Для его отключения, опция подключения allow_local_infile может быть установлена в значение False во время подключения (по умолчанию — True).

Совместимость с другими интерфейсами подключения

passwd, db и connect_timeout допустимы для совместимости с другими интерфейсами MySQL и соответствуют соответственно password, database и connection_timeout. Последние имеют приоритет. Синтаксис имени источника данных или dsn не используется; если он указан, генерируется исключение NotSupportedError.

Реализация протокола клиент/сервер

Connector/Python может использовать чистый Python-интерфейс к MySQL или C-расширение, использующее библиотеку MySQL C-клиента. Аргумент подключения use_pure mysql.connector.connect() определяет, какой вариант использовать. Значение по умолчанию в Connector/Python 8 изменилось с True (использование чистого Python-реализации) на False. Установка use_pure меняет используемую реализацию.

Аргумент use_pure доступен начиная с Connector/Python 2.1.1. Для получения дополнительной информации о C-расширении, см. главу 8 «The Connector/Python C Extension».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-python-en/connector-python-connectargs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API