首页 > 解决方案 > 如何只初始化一次数据库连接并在python的运行时重用它?

问题描述

我目前正在从事一个大型项目,该项目不断执行查询。我的问题是,我的旧代码总是创建一个新的数据库连接和游标,这极大地降低了速度。所以我想是时候做一个新的数据库类了,现在看起来是这样的:

class Database(object):

   _instance = None

   def __new__(cls):
      if cls._instance is None:
         cls._instance = object.__new__(cls)
         try:
            connection = Database._instance.connection = mysql.connector.connect(host="127.0.0.1", user="root", password="", database="db_test")
            cursor = Database._instance.cursor = connection.cursor()
         except Exception as error:
            print("Error: Connection not established {}".format(error))
         else:
            print("Connection established")
      return cls._instance
    
   def __init__(self):
      self.connection = self._instance.connection
      self.cursor = self._instance.cursor
   
   # Do database stuff here

查询将像这样使用该类:

def foo():
   with Database() as cursor:
      cursor.execute("STATEMENT")

我不确定是否只创建一次连接,而不管创建类的频率如何。也许有人知道如何只初始化一次连接以及之后如何在课堂上使用它,或者可能知道我的解决方案是否正确。我很感谢任何帮助!

标签: pythondatabaseclass

解决方案


有点像这样。这是一种使用全局的廉价方式。

class Database(object):
   connection = None

   def __init__(self):
      if not Database.connection:
         Database.connection = mysql.connector.connect(host="127.0.0.1", user="root", password="", database="db_test")

   def query(self,sql):
      cursor = Database.connection.cursor()
      cursor.execute(sql)
   
   # Do database stuff here

推荐阅读