RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

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

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

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

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

  • Модуль mysql.connector.pooling осуществляет объединение связей.

  • Пул открывает много связей и раблтает с потоками безопасно обеспечивая связи запросам.

  • Размер пула связи конфигурируем во время создания. Это не может быть изменено после.

  • Пул связи можно назвать во время создания. Если никакое имя не дано, оно произведено, используя параметры связи.

  • Название пула связи может быть получено от пула связи или связей, полученных из него.

  • Возможно иметь много пулов. Это позволяет запросам поддерживать пулы связей с различными серверами MySQL, например.

  • Для каждого запроса связи пул обеспечивает следующую доступную связь. Никакой циклический алгоритм или другой алгоритм планирования не используются. Если пул исчерпан, поднято исключение PoolError.

  • Возможно повторно формировать параметры связи, используемые пулом. Они относятся к связям, полученным из пула после этого. Переформирование отдельных связей, полученных из пула, вызывая метод config() не поддерживается.

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

  • Промежуточное программное обеспечение, которое поддерживает многократные связи с многократными серверами MySQL и требует, чтобы связи были легко доступны.

  • Веб-сайты, у которых могут быть постоянные связи, открытые для сервера MySQL.

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

Чтобы создать пул связи неявно: Откройте связь и определите один или несколько связанных с пулом аргументов (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 с этими различиями:

  • Чтобы освободить объединенную связь, полученную из пула связи, вызовите метод close() так же, как для любой необъединенной связи. Однако для объединенной связи, close() на самом деле не закрывает связь, а возвращает ее в пул и делает ее доступной для последующих запросов связи.

  • Объединенная связь не может повторно формироваться, используя метод config(). Изменения связи должны быть сделаны через сам объект пула, как описано ниже.

  • У объединенной связи есть свойство pool_name, которое возвращает название пула.

Чтобы создать пул связи явно: Создайте объект 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.

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru