如何降低数据库连接数
时间:2011-03-17
来源:互联网
本帖最后由 lolizeppelin 于 2011-03-17 17:10 编辑
#!/usr/bin/python
import sys,os
import pexpect
import MySQLdb
#import shelve
from UserDict import UserDict
reload(sys)
sys.setdefaultencoding('utf-8')
class mysqlClass(object):
def __init__(self):
"""
self.dblink use to define MySql link info
"""
self.swich = 0
self.dblink = {'dbuser':'root','dbport':3306,'dbpass':'loli383','dbip':'127.0.0.1','dbname':'wrz_db'}
def __setitem__(self,key,item):
if self.swich == 1:
self.closeDB()
self.swich = 0
self.dblink[key] = item
def __getitem__(self,key,item):
if key in self.dblink:
return self.dblink[key]
else:
print "error key"
def __openDB(self):
sqlLink = MySQLdb.connect(host=self.dblink['dbip'],user=self.dblink['dbuser'],passwd=self.dblink['dbpass'],\
db=self.dblink['dbname'],port=self.dblink['dbport'])
self.swich = 1
return sqlLink
def closeDB(self):
if self.swich == 0:
return 0
self.__openDB().close()
return 1
def __executeSqlCommand(self,command):
sql = self.__openDB().cursor()
sql.execute(command)
rows = sql.fetchall()
sql.close()
return rows
def sqlCommand(self,command='show databases',autoCloseDB = 1):
"""
use this script to execute your sql command
"""
for row in self.__executeSqlCommand(command):
print row
if autoCloseDB == 1:
self.closeDB()
p = mysqlClass()
p['dbname']=''
p['dbpass']=''
import time
for i in range(1,10):
p.sqlCommand('select * from mysql.user',autoCloseDB=0)
time.sleep(3)
p.closeDB()
如果我设置autoCloseDB=0的话,netstat看连接数是10个,设置1的话19个
因为设置为0的时候我没有关闭数据库连接的,一个是1+1个连接才丢啊,为什么每次执行还是打开了新的连接
还有,设置为1为什么有18+1个,我的循环才9次啊?
每个都打开了2个连接?
也就是说我 每次 self.closeDB()的时候都重新打开了连接?
也就是说每次__openDB(self)都建立了新的连接?
#!/usr/bin/python
import sys,os
import pexpect
import MySQLdb
#import shelve
from UserDict import UserDict
reload(sys)
sys.setdefaultencoding('utf-8')
class mysqlClass(object):
def __init__(self):
"""
self.dblink use to define MySql link info
"""
self.swich = 0
self.dblink = {'dbuser':'root','dbport':3306,'dbpass':'loli383','dbip':'127.0.0.1','dbname':'wrz_db'}
def __setitem__(self,key,item):
if self.swich == 1:
self.closeDB()
self.swich = 0
self.dblink[key] = item
def __getitem__(self,key,item):
if key in self.dblink:
return self.dblink[key]
else:
print "error key"
def __openDB(self):
sqlLink = MySQLdb.connect(host=self.dblink['dbip'],user=self.dblink['dbuser'],passwd=self.dblink['dbpass'],\
db=self.dblink['dbname'],port=self.dblink['dbport'])
self.swich = 1
return sqlLink
def closeDB(self):
if self.swich == 0:
return 0
self.__openDB().close()
return 1
def __executeSqlCommand(self,command):
sql = self.__openDB().cursor()
sql.execute(command)
rows = sql.fetchall()
sql.close()
return rows
def sqlCommand(self,command='show databases',autoCloseDB = 1):
"""
use this script to execute your sql command
"""
for row in self.__executeSqlCommand(command):
print row
if autoCloseDB == 1:
self.closeDB()
p = mysqlClass()
p['dbname']=''
p['dbpass']=''
import time
for i in range(1,10):
p.sqlCommand('select * from mysql.user',autoCloseDB=0)
time.sleep(3)
p.closeDB()
如果我设置autoCloseDB=0的话,netstat看连接数是10个,设置1的话19个
因为设置为0的时候我没有关闭数据库连接的,一个是1+1个连接才丢啊,为什么每次执行还是打开了新的连接
还有,设置为1为什么有18+1个,我的循环才9次啊?
每个都打开了2个连接?
也就是说我 每次 self.closeDB()的时候都重新打开了连接?
也就是说每次__openDB(self)都建立了新的连接?
作者: lolizeppelin 发布时间: 2011-03-17
- -我明白了,每次sql = self.__openDB().cursor()都是一个新的连接.....
只有直接在sql这次赋值下面操作才可以不开新连接,否则都会一直新开连接
只有直接在sql这次赋值下面操作才可以不开新连接,否则都会一直新开连接
作者: lolizeppelin 发布时间: 2011-03-17
本帖最后由 lolizeppelin 于 2011-03-17 17:54 编辑
自己解决啦
把__openDB(self): 赋值给一个self.xxx变量,每次调用这个变量就不会新开连接啦
没有指针还真麻烦
不过好像可以通过modules模块来达到目的?
直接用getattr来获得类似函数地址来调用好像也不用新开连接?

把__openDB(self): 赋值给一个self.xxx变量,每次调用这个变量就不会新开连接啦
没有指针还真麻烦
不过好像可以通过modules模块来达到目的?
直接用getattr来获得类似函数地址来调用好像也不用新开连接?
作者: lolizeppelin 发布时间: 2011-03-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28