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
| Имя аргумента | По умолчанию | Описание |
|---|---|---|
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 |
Стандартные значения Реализации 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; вместо этого используйте Вызываемый объект, определённый необязательным параметром Эта функциональность была доступна только в расширении C. При использовании чистой реализации Python генерировалась ошибка NotSupportedError. | |
webauthn_callback |
Вызываемый объект, определённый необязательным параметром Этот параметр был добавлен в 8.2.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 | "" |
Дополнительно укажите путь к конкретному файлу конфигурации серверной аутентификации Путь к файлу по умолчанию в Linux и macOS — |
oci_config_profile | "DEFAULT" | Используется для указания профиля для использования из файла конфигурации OCI, который содержит сгенерированную пару временных ключей и токен безопасности. Местоположение файла конфигурации OCI можно определить с помощью |
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.