【发布时间】:2021-09-11 18:20:13
【问题描述】:
我目前正在从事一个大型项目,该项目不断执行查询。我的问题是,我的旧代码总是创建一个新的数据库连接和游标,这大大降低了速度。所以我想是时候做一个新的数据库类了,目前看起来是这样的:
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")
我不确定,无论创建类的频率如何,这是否只创建一次连接。也许有人知道如何只初始化一次连接以及之后如何在课堂上使用它,或者可能知道我的解决方案是否正确。感谢您的帮助!
【问题讨论】:
-
你真的不需要
__new__。只需在__init__和其他方法中使用Database.connection而不是self.connection。 -
@TimRoberts 但是如果我的类不包含连接,我怎么能使用
Database.connection,因为__new__方法创建了它?也许我错过了一些东西,如果你能向我解释一下就好了!已经谢谢你了!