我正在使用一些运行 Tornado Web 服务器的应用程序,它们都使用 mysqldb 连接到 MySql DB。当我启动服务器时,它会实例化一个 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
我很确定我不应该为每笔交易打开/关闭新连接,但是,我应该什么时候?
我注意到其他一些东西有点不对劲,我确信这是相关的:当我需要更新我的数据库表的架构之一(例如:alter table)时,整个有问题的表被锁定并且没有响应 - 直到我杀死我的 3与数据库建立开放连接的应用程序 - 我意识到其中一个连接正在阻止此更新。
最佳实践?想法?
谢谢。