Tornado Webサーバーを実行しているいくつかのアプリを使用しています。これらのアプリはすべて、mysqldbを使用してMySqlDBに接続します。サーバーを起動すると、DBへの接続を開くDBクラス(以下)がインスタンス化されます。すべてのトランザクションは、これと同じ接続を使用して行われます。これが良い考えかどうかはわかりません。
class RDSdb(object):
def __init__(self):
self.connect()
def connect(self):
self.connection = MySQLdb.connect(cursorclass = MySQLdb.cursors.SSDictCursor, host=self.RDS_HOST,
user=self.RDS_USER, passwd=self.RDS_PASS, db=self.RDS_DB)
def get_cursor(self):
try:
cursor = self.connection.cursor()
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.connection.cursor()
return cursor
def fetch_by_query(self, query):
cursor = self.get_cursor()
cursor.execute(query)
result = cursor.fetchall()
cursor.close()
return result
トランザクションごとに新しい接続を開いたり閉じたりするべきではないと確信していますが、それでは、いつ行う必要がありますか?
私は少しずれていることに気づきましたが、これは関連していると確信しています:データベーステーブルのスキーマの1つを更新する必要がある場合(例:テーブルの変更)、問題のテーブル全体がロックされて応答しなくなります-3を殺すまでDBへの接続が開いているアプリ-これらの接続の1つがこの更新を保留していたことに気付きました。
これに関するベストプラクティスは?アイデア?
ありがとう。