我正在使用2个mysql数据库连接。在django中的每个页面请求之后,连接计数(由SHOW STATUS LIKE 'Conn%'
显示每次增加2。
Python 3.4.0
django 1.8.2
mysqlclient 1.3.6
(Windows和Linux似乎都有问题)
最初我直接通过MySQLdb访问了第二个数据库,但现在我已经切换到使用django.db.connections['...']
来访问它了。
这是我的settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myapp',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
'analytics': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myapp_analytics',
'USER': 'root',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
}
这些是我为了方便使用而编写的类:
import MySQLdb as DBConnector
import django
class DictCursorEmulator:
def __init__(self, connection):
self.cursor = connection.cursor()
def _execute(self,query_str,query_args):
self.cursor.execute(query_str,query_args)
def fetchall(self):
"Returns all rows from a cursor as a dict"
desc = self.cursor.description
return [
dict(zip([col[0] for col in desc], row))
for row in self.cursor.fetchall()
]
def fetchone(self):
desc = self.cursor.description
return dict(zip([col[0] for col in desc], row))
#I probably should have used instance methods here but there's too much code to update ;_;
class DatabaseInterface:
@classmethod
def execute(self, queryStr, args):
cursor = DictCursorEmulator(django.db.connections['analytics'])
cursor._execute(queryStr,args)
return cursor
@classmethod
def autocommit(cls, set_to):
django.db.connections['analytics'].autocommit(set_to)
@classmethod
def commit(cls):
django.db.connections['analytics'].commit()
@classmethod
def rollback(cls):
django.db.connections['analytics'].rollback()
我已经尝试排除整个文件,但它仍然使连接数增加2,所以我开始认为这不是我的代码的问题。有谁知道如何解决这个问题?
更新:显然,Connections
显示了连接总数
连接的线程显示2,这是预期的。这解决了我的问题。我刚刚在数据库端出现了很多奇怪的错误。