python mysql连接池
话不多说,直接撸代码
# coding=utf-8
from DBUtils.PooledDB import PooledDB
import pymysql as mysql
import traceback
import logging
import logging.handlers class DB(object):
def __init__(self):
self.host = db_host
self.name = db_name
self.user = db_user
self.passwd = db_passwd
self.pool = PooledDB(mysql, mincached=4, maxcached=10, host=self.host, db=self.name, user=self.user,
passwd=self.passwd, setsession=['SET AUTOCOMMIT = 1']) # 连接数据库
def connect_db(self):
self.db = self.pool.connection()
self.cur = self.db.cursor() # 关闭连接
def close_db(self):
self.cur.close()
self.db.close() # 执行sql
def execute(self, sql):
self.connect_db()
return self.cur.execute(sql) # 获取所有数据列表
def get_list(self, table, fields):
sql = "select %s from %s" % (",".join(fields), table)
try:
self.execute(sql)
result = self.cur.fetchall()
if result:
result = [dict((k, row[i]) for i, k in enumerate(fields)) for row in result]
else:
result = {}
return result
except:
self.WriteLog('db').info("Execute '%s' error: %s" % (sql, traceback.format_exc()))
finally:
self.close_db() # 获取某一条数据,返回字典
def get_one(self, table, fields, where):
conditions = []
if isinstance(where, dict) and where:
for k, v in where.items():
conditions.append("%s='%s'" % (k, v))
sql = "select %s from %s where %s" % (",".join(fields), table, ' AND '.join(conditions))
try:
self.execute(sql)
result = self.cur.fetchone()
if result:
result = dict((k, result[i]) for i, k in enumerate(fields))
else:
result = {}
return result
except:
self.WriteLog('db').info("Execute '%s' error: %s" % (sql, traceback.format_exc()))
finally:
self.close_db() # 更新数据
def update(self, table, fields):
data = ",".join(["%s='%s'" % (k, v) for k, v in fields.items()])
sql = "update %s set %s where id=%s " % (table, data, fields["id"])
try:
return self.execute(sql)
except:
self.WriteLog('db').info("Execute '%s' error: %s" % (sql, traceback.format_exc()))
finally:
self.close_db() # 添加数据
def create(self, table, data):
fields, values = [], []
for k, v in data.items():
fields.append(k)
values.append("'%s'" % v)
sql = "insert into %s (%s) values (%s)" % (table, ",".join(fields), ",".join(values))
try:
return self.execute(sql)
except:
self.WriteLog('db').info("Execute '%s' error: %s" % (sql, traceback.format_exc()))
finally:
self.close_db() # 删除数据
def delete(self, table, where):
conditions = []
if isinstance(where, dict) and where:
for k, v in where.items():
conditions.append("%s='%s'" % (k, v))
sql = "delete from %s where %s" % (table, ' AND '.join(conditions))
try:
return self.execute(sql)
except:
self.WriteLog('db').info("Execute '%s' error: %s" % (sql, traceback.format_exc()))
finally:
self.close_db() def WriteLog(self, log_name):
log_filename = "/db.log"
log_level = logging.DEBUG
format = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)2d]-%(funcName)s %(levelname)s %(message)s')
handler = logging.handlers.RotatingFileHandler(log_filename, mode='a', maxBytes=10 * 1024 * 1024, backupCount=5)
handler.setFormatter(format)
logger = logging.getLogger(log_name)
logger.addHandler(handler)
logger.setLevel(log_level)
return logger # 函数最终将实例化的logger对象返回,后面直接调用即可
python mysql连接池的更多相关文章
- python中实现mysql连接池
python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...
- Mysql 连接池
数据库连接池的作用: 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接 ...
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会 ...
- Java Mysql连接池配置和案例分析--超时异常和处理
前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...
- MySQL连接池
1. using System; using System.Collections; using MySql.Data.MySqlClient; namespace Helper { /// < ...
- tomcat中使用mysql连接池的配置
1.下载相应的jar包,添加到工程中 需要下载的包主要有commons-pool2-2.2 commons-dbcp2-2.0.1-src commons-dbcp2-2.0.1 commons-c ...
- mysql连接池的使用工具类代码示例
mysql连接池代码工具示例(scala): import java.sql.{Connection,PreparedStatement,ResultSet} import org.apache.co ...
- 用swoole简单实现MySQL连接池
MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...
- 实现一个协程版mysql连接池
实现一个协程版的mysql连接池,该连接池支持自动创建最小连接数,自动检测mysql健康:基于swoole的chanel. 最近事情忙,心态也有点不积极.技术倒是没有落下,只是越来越不想写博客了.想到 ...
随机推荐
- [bzoj4003][JLOI2015]城池攻占_左偏树
城池攻占 bzoj-4003 JLOI-2015 题目大意:一颗n个节点的有根数,m个有初始战斗力的骑士都站在节点上.每一个节点有一个standard,如果这个骑士的战斗力超过了这个门槛,他就会根据城 ...
- N天学习一个linux命令之yum
yum命令 用途 yum(Yellowdog Updater Modified),RedHat系Linux操作系统包管理器,基于rpm,从源远程仓库下载rpm包安装,同时解决依赖关系,使用Python ...
- HDU 5467
第一次写LCT,各种模板加入...以后都只遇到有新意的题目再更新了 这道题就是LCT,但是,难在一个回退的操作.这时,可以通过改变执行顺序,先把要回退后再做的操作先执行了,再回退到之前的执行.这时,建 ...
- springmvc 处理lsit类型的请求參数映射成实体属性
<table align="center" cellspacing="10"> <tr> <td> 母码数目:<inp ...
- Android 实现文字与图片的混排
在我们的项目中,常常会碰到图片与文字混排的问题.解决这类问题的方法有非常多,本文给出的方法不是唯一的.仅仅有依据实际场景才干找到更适合的方法. 本文主要通过xml布局来实现图片与文字的混排(水平排列) ...
- extjs_07_combobox&tree&chart
1.combobox <%@ page language="java" import="java.util.*" pageEncoding="U ...
- ubuntu下eclipse连接mysql
提示:一定要保证电脑处于联网状态 我们要下载一个mysql-connector-java-5.0.8-bin.jar的东西(当然这个jar包的版本号和你的mysql版本号的关系不是非常大),放到你新建 ...
- B1085 [SCOI2005]骑士精神 A*搜索
其实就是一个爆搜加剪枝.直接爆搜肯定不行,而A*算法则是想假如剩下都是最优的话,我当前步数还是不足以达到这个状态,那么就直接返回,因为最优状态也无法做到显然不行. 这道题可以用A*最主要就是因为有15 ...
- 关于逆元&&lucas定理
lucas是求组合数C(m,n)%p,有一个公式:C(m,n) = C(m/p,n/p)*C(m%p,n%p). (a*b)%c==a%c*b%c,但是(a/b)%c!=a%c/b%c,所以我们要算b ...
- bzoj2120 数颜色——带修莫队
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 带修改的莫队: 用结构体存下修改和询问,排好序保证时间后就全局移动修改即可: 参考了T ...