话不多说,直接撸代码

 # 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连接池的更多相关文章

  1. python中实现mysql连接池

    python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...

  2. Mysql 连接池

    数据库连接池的作用: 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接 ...

  3. 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。

    解决Mysql连接池被关闭  ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会 ...

  4. Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  5. MySQL连接池

    1. using System; using System.Collections; using MySql.Data.MySqlClient; namespace Helper { /// < ...

  6. tomcat中使用mysql连接池的配置

    1.下载相应的jar包,添加到工程中 需要下载的包主要有commons-pool2-2.2 commons-dbcp2-2.0.1-src commons-dbcp2-2.0.1  commons-c ...

  7. mysql连接池的使用工具类代码示例

    mysql连接池代码工具示例(scala): import java.sql.{Connection,PreparedStatement,ResultSet} import org.apache.co ...

  8. 用swoole简单实现MySQL连接池

    MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...

  9. 实现一个协程版mysql连接池

    实现一个协程版的mysql连接池,该连接池支持自动创建最小连接数,自动检测mysql健康:基于swoole的chanel. 最近事情忙,心态也有点不积极.技术倒是没有落下,只是越来越不想写博客了.想到 ...

随机推荐

  1. [poj3321]Apple Tree_dfs序_树状数组

    Apple Tree poj-3321 题目大意:给你一个根固定的树,每一个点的点权是0或1,查询子树点权和. 注释:$1\le n \le 10^5$. 想法:刚刚学习dfs序,刷到水题偶哈哈. 什 ...

  2. FOJ 10月赛题 FOJ2198~2204

    A题. 发现是递推可以解决这道题,a[n]=6*a[n-1]-a[n-2].因为是求和,可以通过一个三维矩阵加速整个计算过程,主要是预处理出2^k时的矩阵,可以通过这道题 #include <i ...

  3. hdu1068 Girls and Boys --- 最大独立集

    有一个集合男和一个集合女,给出两集合间一些一一相应关系.问该两集合中的最大独立集的点数. 最大独立集=顶点总数-最大匹配数 此题中.若(a,b)有关.则(b,a)有关.每个关系算了两次,相当于二分图的 ...

  4. PHP发展的现状和前景

    本人小菜鸟一仅仅,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群. 希望光临本博客的人能够进来交流.寻 ...

  5. CodeForces 653 A. Bear and Three Balls——(IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2))

    传送门 A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input ...

  6. 《从零開始学Swift》学习笔记(Day 52)——Cocoa错误处理模式

    原创文章,欢迎转载. 转载请注明:关东升的博客 Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式採用Cocoa框架错误处理模式,到如 ...

  7. Pointcut is not well-formed: expecting &#39;name pattern&#39; at character position 36

  8. 浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

    本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linu ...

  9. 杂项-TMod:常见错误

    ylbtech-杂项-TMod:常见错误 1.返回顶部 1. 1.1. {Template Error} TypeError: dateDiff is not a function at Array. ...

  10. VBA 字符串处理函数集

    转自:http://blog.csdn.net/jyh_jack/article/details/2315345 mid(字符串,从第几个开始,长度)  在[字符串]中[从第几个开始]取出[长度个字符 ...