相关疑难解决方法(0)

整个 python 应用程序中的单个数据库连接(遵循单例模式)

我的问题是在整个应用程序中维护单个数据库连接的最佳方法是什么? 使用单例模式?如何?

需要注意的条件:

  1. 如果有多个请求,我应该使用相同的连接
  2. 如果连接关闭,则创建一个新连接
  3. 如果连接超时,在新请求时,我的代码应该创建一个新连接。

Django ORM 不支持我的数据库的驱动程序。由于相同的驱动程序相关问题,我使用pyodbc连接到数据库。现在我有以下用于创建和管理数据库连接的课程:

class DBConnection(object):
    def __init__(self, driver, serve,
                 database, user, password):

        self.driver = driver
        self.server = server
        self.database = database
        self.user = user
        self.password = password

    def __enter__(self):
        self.dbconn = pyodbc.connect("DRIVER={};".format(self.driver) +\
                                     "SERVER={};".format(self.server) +\
                                     "DATABASE={};".format(self.database) +\
                                     "UID={};".format(self.user) +\
                                     "PWD={};".format(self.password) + \
                                     "CHARSET=UTF8",
                                     # "",
                                     ansi=True)

        return self.dbconn

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.dbconn.close()
Run Code Online (Sandbox Code Playgroud)

但是这种方法的问题在于它会为每个查询创建新的数据库连接。遵循单例模式的更好方法是什么?如果连接关闭,我能想到的方式将保留对连接的引用。就像是:

 def get_database_connection():
     conn = DBConnection.connection
     if not conn:
          conn = DBConnection.connection = DBConnection.create_connection()
     return conn …
Run Code Online (Sandbox Code Playgroud)

python django singleton database-connection pyodbc

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

database-connection ×1

django ×1

pyodbc ×1

python ×1

singleton ×1