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