PythonはMysql接続プールを使用
0 X 00データベース接続プールを使用する理由
通常、pymysqlやデータベース接続パッケージを使用してデータベースと対話することに慣れている場合があります.コードは次のようになります.
つまり、接続データベースをメソッドにカプセル化し、接続が必要なたびにconnオブジェクトとcursorオブジェクトを取得するように呼び出すと、接続の確立->データベース操作の実行->接続の解放が必要になるため、損失が発生します.一方、データベース接続プールは、複数のデータベース接続が保存されているプールを維持するために、データベースを接続する必要があるたびに、接続プールから1つの接続を取り出して使用すればよい.使用後、接続は解放されず、接続プールに返却して管理し、接続を絶えず確立し、接続を解放する過程を節約する.
0 X 01 DBUtilsによるデータベース接続プールの構築
DBUtilsによって、MysqlPoolクラスのクラス属性としてPooledDBオブジェクトがインスタンス化され、__が書き換えられることがわかります.enter__および_exit__メソッドはwith文に入ると接続プールからデータベース接続を取得し、with文が終わると自動的に接続プールを解放し、接続プールに返します.
使用方法は通常の接続mysqlと変わりません.with文で呼び出せばいいです.
アクセサリーの使い方:
DBUtilsには強力な機能がたくさんあります.より多くのニーズがあれば、関連ドキュメントを自分で参照することができます.本稿では、レンガを投げて玉を引くだけで、データベース接続プールの使用方法を提供します.
通常、pymysqlやデータベース接続パッケージを使用してデータベースと対話することに慣れている場合があります.コードは次のようになります.
import pymysql
config = {
'host': config_template['MYSQL']['HOST'],
'port': config_template['MYSQL']['PORT'],
'user': config_template['MYSQL']['USER'],
'password': config_template['MYSQL']['PASSWD'],
'db': config_template['MYSQL']['DB'],
'charset': config_template['MYSQL']['CHARSET'],
'cursorclass': pymysql.cursors.DictCursor
}
def db_conn():
conn = pymysql.connect(**config)
cursor = conn.cursor()
return conn,cursor
つまり、接続データベースをメソッドにカプセル化し、接続が必要なたびにconnオブジェクトとcursorオブジェクトを取得するように呼び出すと、接続の確立->データベース操作の実行->接続の解放が必要になるため、損失が発生します.一方、データベース接続プールは、複数のデータベース接続が保存されているプールを維持するために、データベースを接続する必要があるたびに、接続プールから1つの接続を取り出して使用すればよい.使用後、接続は解放されず、接続プールに返却して管理し、接続を絶えず確立し、接続を解放する過程を節約する.
0 X 01 DBUtilsによるデータベース接続プールの構築
import pymysql
from g_conf.config import config_template
from DBUtils.PooledDB import PooledDB
class MysqlPool:
config = {
'creator': pymysql,
'host': config_template['MYSQL']['HOST'],
'port': config_template['MYSQL']['PORT'],
'user': config_template['MYSQL']['USER'],
'password': config_template['MYSQL']['PASSWD'],
'db': config_template['MYSQL']['DB'],
'charset': config_template['MYSQL']['CHARSET'],
'maxconnections': 70, #
'cursorclass': pymysql.cursors.DictCursor
}
pool = PooledDB(**config)
def __enter__(self):
self.conn = MysqlPool.pool.connection()
self.cursor = self.conn.cursor()
return self
def __exit__(self, type, value, trace):
self.cursor.close()
self.conn.close()
DBUtilsによって、MysqlPoolクラスのクラス属性としてPooledDBオブジェクトがインスタンス化され、__が書き換えられることがわかります.enter__および_exit__メソッドはwith文に入ると接続プールからデータベース接続を取得し、with文が終わると自動的に接続プールを解放し、接続プールに返します.
使用方法は通常の接続mysqlと変わりません.with文で呼び出せばいいです.
def func(tar_id):
with MysqlPool() as db:
db.cursor.execute('YOUR_SQL')
db.conn.commit()
アクセサリーの使い方:
def db_conn(func):
def wrapper(*args, **kw):
with MysqlPool() as db:
result = func(db, *args, **kw)
return result
return wrapper
@db_conn
def update_info(db, *args, **kw):
try:
db.cursor.execute("YOUR_SQL")
db.conn.commit()
return 0
except Exception as e:
db.conn.rollback()
return 1
DBUtilsには強力な機能がたくさんあります.より多くのニーズがあれば、関連ドキュメントを自分で参照することができます.本稿では、レンガを投げて玉を引くだけで、データベース接続プールの使用方法を提供します.