2

我正在使用一些运行 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与数据库建立开放连接的应用程序 - 我意识到其中一个连接正在阻止此更新。

最佳实践?想法?

谢谢。

4

0 回答 0