Эта секция описывает дополнительные особенности Connection/Python:
Объединение связи: раздел 9.1 .
Django для MySQL: раздел 9.2.
Простое объединение связи поддерживается, у которого есть эти особенности:
Модуль 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)
Связи, полученные из пула после использования изменения конфигурации, имеют новые параметры. Связи, полученные перед изменением, остаются незатронутыми, но когда они закрываются (возвращаются в пул), будут вновь открыты с новыми параметрами прежде, чем будут возвращены пулом для последующих запросов связи.
Connector/Python включает модуль
mysql.connector.django
, который предоставляет
Django back end для MySQL. Это поддерживает новые функции в MySQL 5.6,
например, поддержку долей секунды для временных типов данных.
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
.
Django может запустить клиентское приложение MySQL
mysql. При этом он установит
sql_mode
в
TRADITIONAL
при запуске.
Некоторые опции MySQL активированы в зависимости от версии сервера.
Например, поддержка точности долей секунды
позволена, соединяясь с сервером от MySQL 5.6.4 или выше.
Django DateTimeField
сохранен в столбце
MySQL, определенном как DATETIME(6)
,
TimeField
сохранен как
TIME(6)
.
Для получения дополнительной информации о поддержке долей секунды см.
Fractional Seconds in Time Values.