话不多说,直接撸代码

 # 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. Maven 的dependency 的 classifier的作用

    直接看一个例子,maven中要引入json包,于是使用了 <dependency> <groupId>net.sf.json-lib</groupId> <a ...

  2. ZOJ 3814 Sawtooth Puzzle (2014年牡丹江赛区网络赛F题)

    1.题目描写叙述:点击打开链接 2.解题思路:本题是一道隐式图的搜索题目.一般来说,这类题目首先要定义状态,接下来是弄清楚状态怎样转移,以及状态怎样判重,怎样推断当前状态是否和目标状态同样.至于求解最 ...

  3. iOS-UIWebview比例缩放

    你在使用UIWebview显示网页时.可能会注意到.UIWebView所支持的缩放倍率是非常有限的.而在Safari自己所支持的缩放系数比UIWebview要大得多. 本文解释了怎样加大UIWebVi ...

  4. C++对象内存布局 (二)

    在上一篇文章中讨论了C++单一一般继承的对象内存布局http://www.cnblogs.com/uangyy/p/4621561.html 接下来继续讨论第二种情况: 2.单一的虚拟继承:有成员变量 ...

  5. Spring配置事务中的 transactionAttributes 各属性含义及XML配置

    转自:https://blog.csdn.net/z69183787/article/details/17161393 transactionAttributes 属性: PROPAGATION 事务 ...

  6. Find Minimum in Rotated Sorted Array 典型二分查找

    https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Suppose a sorted array is rot ...

  7. selenium3 + python - gird分布式(转载)

    本篇转自博客:上海-小T 转载链接:https://blog.csdn.net/real_tino/article/details/53467406 Selenium grid是用来分布式执行测试用例 ...

  8. MySQL-基础操作之增删改查

    1.增 (1)创建数据库dks create database dks; (2)创建名为t1的表,并指定引擎和字符集: ) not null,ages int) engine=innodb defau ...

  9. JS代码放在哪里比较好!

    在页面上加上<script></script>只有2个地方:head中,body体中 如果外部的JS文件,在head中加,写页面特效js放在body后面. <html&g ...

  10. 工具分享2:Python 3.6.4、文本编辑器EditPlus、文本编辑器Geany

    工具官网下载地址: https://www.python.org/downloads/ python 3.6.0下载链接: 链接:https://pan.baidu.com/s/1snuSxsx 密码 ...