python - 如何只初始化一次数据库连接并在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")
我不确定是否只创建一次连接,而不管创建类的频率如何。也许有人知道如何只初始化一次连接以及之后如何在课堂上使用它,或者可能知道我的解决方案是否正确。我很感谢任何帮助!
解决方案
有点像这样。这是一种使用全局的廉价方式。
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
推荐阅读
- javascript - 画布开始滞后时间
- android - 如何使用 MediaRecorder 和 OpenGL ES 记录过滤后的视频帧
- variables - STM32F0。如何将 RAM 中变量的值分配给单独的变量?
- c++ - 访问在 python 中使用 suprocess.check_output 调用的 c++ 代码的输出
- python - 我无法安装opencv
- c# - c#如何使用“实现INotifyPropertyChanged”或“继承DependencyObject”
- java - 预期的数组类型;找到:'java.util.map
' - node.js - 使用 Express.js 和 express-fileupload 上传文件
- python - 将基于 Flask 的 Api(使用女服务员)部署到 Docker
- reactjs - ReactJS 应用程序中奇怪的 cookie 行为