Глава 9. Другие темы Connector/Python

Эта секция описывает дополнительные особенности Connection/Python:

9.1. Объединение связи Connector/Python

Простое объединение связи поддерживается, у которого есть эти особенности:

Приложения, которые могут извлечь выгоду из объединения связи, включают:

Пул связи может быть создан неявно или явно.

Чтобы создать пул связи неявно: Откройте связь и определите один или несколько связанных с пулом аргументов (pool_name, pool_size). Например:

dbconfig = {
  "database": "test",
  "user": "joe"
}
cnx = mysql.connector.connect(pool_name = "mypool", pool_size=3, **dbconfig)

Название пула ограничивается алфавитно-цифровыми символами и специальными символами ., _, *, $ и #. Название пула должно быть не больше pooling.CNX_POOL_MAXNAMESIZE символов (по умолчанию 64).

Размер пула должен быть больше 0 и меньше или равным pooling.CNX_POOL_MAXSIZE (по умолчанию 32).

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

Последующие вызовы connect() возвращают связи из существующего пула. Любой параметр pool_size или аргументы связи проигнорированы, таким образом, следующий вызов connect() эквивалентен оригинальному connect():

cnx = mysql.connector.connect(pool_name = "mypool", pool_size = 3)
cnx = mysql.connector.connect(pool_name = "mypool", **dbconfig)
cnx = mysql.connector.connect(pool_name = "mypool")

Объединенные связи получены, вызывая connect() со связанным с пулом аргументом, имеющим класс PooledMySQLConnection (см. раздел 10.4). PooledMySQLConnection, объединяющий объекты связи, подобен объектам MySQLConnection с этими различиями:

Чтобы создать пул связи явно: Создайте объект MySQLConnectionPool (см. раздел 10.3 ):

dbconfig = {
  "database": "test",
  "user": "joe"
}
cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
                                                      pool_size = 3,
                                                      **dbconfig)

Чтобы запросить связь из пула, используйте метод get_connection():

cnx1 = cnxpool.get_connection()
cnx2 = cnxpool.get_connection()

Когда вы создаете пул связи явно, возможно использовать метод set_config() объекта пула, чтобы повторно сформировать параметры связи пула:

dbconfig = {
  "database": "performance_schema",
  "user": "admin",
  "password": "password"
}
cnxpool.set_config(**dbconfig)

Связи, полученные из пула после использования изменения конфигурации, имеют новые параметры. Связи, полученные перед изменением, остаются незатронутыми, но когда они закрываются (возвращаются в пул), будут вновь открыты с новыми параметрами прежде, чем будут возвращены пулом для последующих запросов связи.

9.2. Connector/Python и Django

Connector/Python включает модуль mysql.connector.django, который предоставляет Django back end для MySQL. Это поддерживает новые функции в MySQL 5.6, например, поддержку долей секунды для временных типов данных.

Настройка Django

Django использует конфигурационный файл, названный settings.py, который содержит переменную DATABASES (см. https://docs.djangoproject.com/en/1.5/ref/settings/#std:setting-DATABASES ). Чтобы формировать Django, чтобы использовать Connector/Python как MySQL back end, пример, найденный в руководстве Django, может использоваться в качестве основы:

DATABASES = {
  'default': {
    'NAME': 'user_data',
    'ENGINE': 'mysql.connector.django',
    'USER': 'mysql_user',
    'PASSWORD': 'password',
    'OPTIONS': {
      'autocommit': True,
    },
  }
}

Возможно добавить больше параметров, используя OPTIONS.

Поддержка особенностей MySQL

Django может запустить клиентское приложение MySQL mysql. При этом он установит sql_mode в TRADITIONAL при запуске.

Некоторые опции MySQL активированы в зависимости от версии сервера. Например, поддержка точности долей секунды позволена, соединяясь с сервером от MySQL 5.6.4 или выше. Django DateTimeField сохранен в столбце MySQL, определенном как DATETIME(6), TimeField сохранен как TIME(6). Для получения дополнительной информации о поддержке долей секунды см. Fractional Seconds in Time Values.