Regroupement de connexions avec Python + MySQL

Comment faire un pool de connexions avec MySQL en Python et que faire à ce sujet.

Problème MySQLConnectionPool avec mysql-connector-python

Tout d'abord, si vous souhaitez simplement créer une connexion avec le client MySQL Python officiel mysql-connector-python, vous pouvez écrire:

import mysql.connector

cnx = mysql.connector.connect(host="...", user="...", password="...", database="...")

Ce mysql-connector-python fournit une classe appelée MySQLConnectionPool, qui facilite le regroupement de connexions. [^ MySQLConnectionPool]

from mysql.connector.pooling import MySQLConnectionPool

cnxpool = MySQLConnectionPool(host="...", user="...", password="...", database="...", pool_size=10)

cnx = cnxpool.get_connection()

cnx.close()  #La connexion n'est pas réellement déconnectée et est libérée dans le pool de connexions

Félicitations ... ** ce n'est pas le cas. ** **

Essayez d'exécuter le code suivant.

from mysql.connector.pooling import MySQLConnectionPool

cnxpool = MySQLConnectionPool(host="...", user="...", password="...", database="...", pool_size=3)

cnxpool.get_connection()
cnxpool.get_connection()
cnxpool.get_connection()
cnxpool.get_connection()  #=> PoolError: Failed getting connection; pool exhausted

MySQLConnectionPool est conçu pour ** lever une exception lorsque les connexions du pool sont épuisées **.

Je ne déteste pas cette spécification simple, mais dans de nombreux cas, ce serait bien si elle se comportait comme "attendre qu'une autre connexion soit libérée" lors de son utilisation dans une application Web. Sinon, une erreur se produira même si le nombre de requêtes parallèles traitées dépasse même un peu la taille du pool.

Solution SQLAlchemy QueuePool

Ce problème peut être résolu en utilisant QueuePool de SQLAlchemy. [^ Queue Pool]

from sqlalchemy.pool import QueuePool

cnxpool = QueuePool(lambda: mysql.connector.connect(host="...", user="...", password="...", database="..."), pool_size=10)

cnx = cnxpool.connect()

Il semble que le premier argument de QueuePool puisse être n'importe quelle fonction qui renvoie "objet de connexion correspondant à l'API DB". C'est polyvalent et incroyable.

Le module lui-même appelé SQLAlchemy est ORM, mais cette fois il n'utilise que le mécanisme appelé QueuePool sans utiliser du tout la partie ORM.

Recommended Posts

Regroupement de connexions avec Python + MySQL
déboguer la connexion mysql avec python mysql.connector
Connexion simultanée UDP avec Python
Construire un environnement Mysql + Python avec docker
FizzBuzz en Python3
Recevoir des données textuelles de mysql avec python
Grattage avec Python
INSÉRER dans MySQL avec Python [Pour les débutants]
Grattage avec Python
Python avec Go
100 traitement d'image avec Python Knock # 8 Max Pooling
Twilio avec Python
Intégrer avec Python
Connectez-vous à MySQL avec Python dans Docker
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Faisons la manipulation des données MySQL avec Python
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Connexion ODBC à FileMaker 11 Server Advanced avec Python 3
Connectez-vous à MySQL avec Python sur Raspberry Pi
[Introduction pour les débutants] Manipuler MySQL avec Python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Touchez MySQL depuis Python 3
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Grattage avec Python + PhantomJS
Utilisez MySQL depuis Python
Conduisez WebDriver avec python
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Utiliser DynamoDB avec Python