Pythonのデータベース接続プール - アセンブリDBUtils

DBUtils Pythonは、データベース接続プールを実装するためのモジュールです。

この接続プールは、二つの接続モードがあります。

:DBUtilsは、2つの外部インターフェイスを提供
PersistentDBを:スレッド特定のデータベース接続を提供し、自動的に接続を管理します。
PooledDB:スレッド間でデータベース接続を共有し、自動的に接続を管理することができます提供。

PersistentDBモード
呼び出しがcloseメソッドをスレッド場合でも、接続を作成するために、各スレッドは、リンクが自動的にシャットダウンし、スレッドが終了したときにだけ、再び独自のスレッドのための接続プールにバックリンクを入れて、シャットダウンしません。

コードコピー
DBUtils.PersistentDBインポートPersistentDBから
pymysqlインポート
POOL = PersistentDB(
クリエーター= pymysql、リンクデータベースモジュール#1
回数が再利用されるmaxusage =なし、#リンクアップをなし無制限示していない
#セッションを開始する、[] = setsessionをコマンドリストを実行する。前
のping = 0、
のping MySQLサーバ、サービスが利用可能かどうかを確認してください。
閉鎖可能に= Falseに、
#をfalseの場合、はconn.close()効果的に次の使用のために無視され、その後、閉じられたスレッド、リンクが自動的にシャットダウンします。IfはTrueで、はconn.close()はリンクを閉じ、再びpool.connectionを呼び出すときにエラーが発生します、それは本当に接続(pool.steady_connectionを(閉じられたとして)新しいを得ることができますリンクス)
のThreadLocal =なし、リンクされたオブジェクトを保持している#このスレッドの排他的価値があるオブジェクトは、オブジェクトがリセットされない場合は、リンクの
ホスト=「127.0.0.1」、
ポート= 3306、
ユーザー=「ルート」、
パスワード=「123456」、
=データベース'テスト'、
文字セット= 'UTF8'

デフFUNC():
CONN = POOL.connection(共有可能= False)が
カーソル= conn.cursor()
'利用者からの選択*')cursor.execute
結果= cursor.fetchall()
印刷(結果は)
(cursor.close)
CONN .close()
の場合__name__ == '__main__':

FUNC()
コードをコピー
PooledDBモードを
すべてのスレッドで共有接続プールへの接続の数を作成します。

コードのコピー
インポートpymysqlを

インポートPooledDB DBUtils.PooledDB
POOL = PooledDB(
クリエーター= pymysql、リンクデータベースモジュール#1
MaxConnectionsを= 6、最大接続プール#によって許可接続の数、および接続の数を制限しないなし0
= 2 mincached、#初期化、リンク少なくともプールを作成するには無料のリンクは、0が作成されません
5、最大のアイドルリンク#リンク、0のプールとなしには制限はない= maxcached
= 3 maxshared、リンク#0の共有プールへのアップリンクの数となし、全てを表します株式.PS:。役に立たない、threadsafety pymysqlとのMySQLdbモジュールは、すべての値にかかわらず、すべてのリンクが常に共有されるように、常に0である_maxcached数、の設定に、1であるため、
接続なした場合=真、#接続プールをブロック後に、ブロックは.TRUEを待っているかどうか、待って、虚偽、その後を待たないエラー
maxusage =なし、#再利用するまでのリンクの数は、いずれも無制限を意味しません
。setsession = []、#コマンドはセッションリストの開始前に実行
にpingを= 0、
ピングの#MySQLサーバ、チェックサービスが利用可能であるかどうか。
ホスト= '127.0.0.1'、
= 3306ポート、
ユーザー= 'ルート'、
パスワード= '123456'、
データベース=「TES T '
文字セット=' UTF8 "


FUNC DEF():
検出は、現在の接続数が、その後、リンクの最大数よりも少ない、もし小さくない実行されている:待つか、異常な新聞はTooManyConnections上げる
#や
#はリンク初期化SteadyDBConnectionを取得するための優先事項であるときに作成されたリンクを。
#1 SteadyDBConnectionは、オブジェクトにカプセル化し、PooledDedicatedDBConnectionを返します。
#リンクは創造の初めにリンクしていない場合、オブジェクトは、SteadyDBConnectionを作成して再パッケージ化し、PooledDedicatedDBConnectionに戻ることです。
リンクがクローズされると、後続のスレッドが使用され続けるように#、接続がプールに戻されます。
CONN = POOL.connection()

( 'リンクを奪われた'番目、conn1._con)#印刷
#印刷(目、pool._idle_cache、 'プールがあります' '\ rを\ n'は)

カーソル= conn.cursor()
cursor.execute( 'ユーザSELECT * FROM')
結果= cursor.fetchall()
プリント(結果)
はconn.close()

__name__ == '__main__' の場合:

FUNC()

おすすめ

転載: www.cnblogs.com/dingjiaoyang/p/11004949.html