Comment utiliser pymysqlpool dans la base de données Python MySQL ?

零下一度
Libérer: 2017-07-09 11:57:26
original
4088 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur le composant de pool de connexions Python Base de données MySQL pymysqlpool L'article le présente en détail à travers un exemple de code, qui a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin. Jetons un coup d'œil ensemble ci-dessous.

Introduction

pymysqlpool (téléchargement local) est un nouveau membre de la boîte à outils de base de données, visant à fournir un pool de connexion à la base de données pratique middleware pour éviter la création et la libération fréquentes de ressources de connexion à la base de données dans l'application. Le pool de connexions lui-même est thread-safe et peut être utilisé dans un environnement multithread sans se soucier du partage des ressources de connexion par plusieurs threads

Fournit l'interface la plus compacte possible pour

Opérations de base de données

;La gestion du pool de connexions est complétée au sein du package, et le client peut obtenir les ressources de connexion dans le pool via l'interface (retour
);

  • sera compatible avec dataobj dans la plus grande mesure et est facile à utiliser

  • Le pool de connexion lui-même a la fonction ; d'augmenter dynamiquement le nombre de connexions, c'est-à-dire que max_pool_size et step_size seront utilisés pour contrôler chaque augmentation du nombre de connexions et du nombre maximum de connexions

  • Le nombre maximum de connexions dans ; le pool de connexions est également augmenté dynamiquement et le commutateur activate_auto_resize doit être activé. Après cela, lorsqu'un délai d'acquisition de connexion se produit, il sera enregistré comme une pénalité et étendra max_pool_size d'un certain multiple.
  • pymysql.Connection

  • Flux de travail de base

  • Notez que lorsque plusieurs threads demandent en même temps, si le pool S'il n'y a pas d'objets de connexion disponibles, vous devez faire la queue

  • Après l'initialisation, les objets de connexion step_size seront d'abord créés et placés dans le pool de connexions

Le client demande un objet de connexion, et le pool de connexions sélectionnera un objet de connexion qui n'a pas été utilisé récemment et le renverra (il vérifiera également si la connexion est normale

) ; Le client utilise l'objet de connexion
, après avoir effectué l'opération correspondante, appeler l'interface pour renvoyer l'objet de connexion

    Le pool de connexion recycle ; l'objet de connexion et l'ajoute à la file d'attente du pool pour qu'il puisse être utilisé par d'autres requêtes.
  • Configuration des paramètres


  • pool_name : Le nom du pool de connexions. Plusieurs paramètres de connexion correspondent à plusieurs objets de pool de connexions différents, plusieurs
  • mode singleton


|--------|        |--------------|
|  | <==borrow connection object== | Pool manager |
| Client |        |    |
|  | ==return connection object==> | FIFO queue |
|--------|        |--------------|
Copier après la connexion
hôte : Adresse de la base de données

utilisateur : nom d'utilisateur du serveur de base de données

    mot de passe : mot de passe de l'utilisateur
  • base de données : La base de données sélectionnée par défaut

  • port : Le port du serveur de base de données

  • charset :

    Jeu de caractères
  • , la valeur par défaut est 'utf8 '
  • use_dict_cursor : utiliser le format de dictionnaire ou un tuple pour renvoyer les données
  • max_pool_size : priorité du pool de connexions, nombre maximum de connexions ; 🎜>
  • step_size : le pool de connexions augmente dynamiquement le nombre de connexions
  • enable_auto_resize : s'il faut étendre dynamiquement le pool de connexions, c'est-à-dire lorsque max_pool_size ; est dépassé, max_pool_size sera automatiquement étendu ;

  • pool_resize_boundary : Cette configuration est la limite supérieure que le pool de connexions peut éventuellement augmenter, et l'expansion instantanée ne peut pas dépasser cette valeur ; 🎜>

    auto_resize_scale : augmentez automatiquement le gain max_pool_size, la valeur par défaut est de 1,5 fois l'expansion
  • wait_timeout : combien de temps attendre au maximum lors de la file d'attente pour un objet de connexion Quand. un délai d'attente se produit, le pool de connexions tente d'augmenter automatiquement le nombre actuel de connexions
  • kwargs : d'autres paramètres de configuration seront transmis à
  • Exemple d'utilisation
  • 1. Utilisez le gestionnaire de contexte du curseur (raccourci, mais il s'appliquera pour un. objet de connexion à chaque fois qu'il est obtenu, donc plusieurs appels sont inefficaces) :

  • pymysql.Connection

    2. Utiliser le gestionnaire de contexte de connexion :

Veuillez tester davantage. Déplacez-vous vers test_example.py.

Dépend de



from pymysqlpool import ConnectionPool
config = {
 &#39;pool_name&#39;: &#39;test&#39;,
 &#39;host&#39;: &#39;localhost&#39;,
 &#39;port&#39;: 3306,
 &#39;user&#39;: &#39;root&#39;,
 &#39;password&#39;: &#39;root&#39;,
 &#39;database&#39;: &#39;test&#39;
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
# 直接访问并获取一个 cursor 对象,自动 commit 模式会在这种方式下启用
with connection_pool().cursor() as cursor:
 print(&#39;Truncate table user&#39;)
 cursor.execute(&#39;TRUNCATE user&#39;)
 print(&#39;Insert one record&#39;)
 result = cursor.execute(&#39;INSERT INTO user (name, age) VALUES (%s, %s)&#39;, (&#39;Jerry&#39;, 20))
 print(result, cursor.lastrowid)
 print(&#39;Insert multiple records&#39;)
 users = [(name, age) for name in [&#39;Jacky&#39;, &#39;Mary&#39;, &#39;Micheal&#39;] for age in range(10, 15)]
 result = cursor.executemany(&#39;INSERT INTO user (name, age) VALUES (%s, %s)&#39;, users)
 print(result)
 print(&#39;View items in table user&#39;)
 cursor.execute(&#39;SELECT * FROM user&#39;)
 for user in cursor:
  print(user)
 print(&#39;Update the name of one user in the table&#39;)
 cursor.execute(&#39;UPDATE user SET name="Chris", age=29 WHERE id = 16&#39;)
 cursor.execute(&#39;SELECT * FROM user ORDER BY id DESC LIMIT 1&#39;)
 print(cursor.fetchone())
 print(&#39;Delete the last record&#39;)
 cursor.execute(&#39;DELETE FROM user WHERE id = 16&#39;)
Copier après la connexion
pymysql : cette boîte à outils sera utilisée pour effectuer la connexion à la base de données et d'autres opérations


pandas : pandas a été utilisé lors des tests.

import pandas as pd
from pymysqlpool import ConnectionPool
config = {
 &#39;pool_name&#39;: &#39;test&#39;,
 &#39;host&#39;: &#39;localhost&#39;,
 &#39;port&#39;: 3306,
 &#39;user&#39;: &#39;root&#39;,
 &#39;password&#39;: &#39;root&#39;,
 &#39;database&#39;: &#39;test&#39;
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
with connection_pool().connection() as conn:
 pd.read_sql(&#39;SELECT * FROM user&#39;, conn)
# 或者
connection = connection_pool().borrow_connection()
pd.read_sql(&#39;SELECT * FROM user&#39;, conn)
connection_pool().return_connection(connection)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal