python单例与数据库连接池
单例:专业用来处理连接多的问题(比如连接redis,zookeeper等),全局只有一个对象
单例代码
def singleton(cls): instances = {} def _singleton(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls] return _singleton
实例代码
from singleton import singleton #@singleton
class MysqlOpers: def __init__(self):
print('建立mysql连接')
#伪代码 self.db = MySQLdb.connect() def select(self):
pass m = MysqlOpers()
n = MysqlOpers()
c = MysqlOpers() print(id(m))
print(id(n))
print(id(c))

加上单例装饰器后

mysql 连接池
#coding=utf-8 import traceback import MySQLdb
from DBUtils.PooledDB import PooledDB db_pool_ins = None #需要替换用户名,密码等
class DBPool():
def __init__(self):
self.pool = PooledDB(creator=MySQLdb, mincached=1, maxcached=10, maxconnections=100, blocking=True,
host= "127.0.0.1", port=3306, user='', passwd='',
db='test', charset='utf8',) def get_connection(self):
return self.pool.connection() class DBAction():
#连接池对象
def __init__(self):
#建立和数据库系统的连接
global db_pool_ins
if db_pool_ins == None:
db_pool_ins = DBPool()
self.conn = db_pool_ins.get_connection()
#获取操作游标
self.cursor = self.conn.cursor() def close_database(self):
self.cursor.close()
self.conn.close() def data_operate(self, sql, params=()):
'''
数据的插入,更新,删除
:param database:
:param sql:
:return: 成功:0,失败:1
'''
try:
self.cursor.execute(sql, params)
self.conn.commit()
return 0
except:
print("sql is %s, params is %s error. %s" % (sql, params, traceback.format_exc()))
self.conn.rollback()
raise Exception def data_operate_many(self, sql, params=()):
'''
数据的插入,更新,删除
:param sql:
:param params:
:return: 成功:0,失败:1
'''
#执行sql语句
self.cursor.executemany(sql, params)
#提交到数据库执行
self.conn.commit() def data_operate_count(self, sql, params=()):
'''
数据的插入,更新,删除
:return: 受影响的条数
'''
#执行sql语句
count = self.cursor.execute(sql, params)
#提交到数据库执行
self.conn.commit()
return count def data_inquiry(self, sql, size=10, params=()):
'''
:param database:
:param sql:
:return: ((),(),...,())
'''
self.cursor.execute(sql, params)
result = self.cursor.fetchmany(size)
return result def data_inquiry_all(self, sql, params=()):
'''
:param database:
:param sql:
:return: ((),(),...,())
'''
self.cursor.execute(sql, params)
result = self.cursor.fetchall() return result def commit(self):
self.conn.commit()
使用
from mysql import DBAction
dba = DBAction()
ret = dba.data_inquiry_all("SELECT * FROM friend")
print(ret)
python单例与数据库连接池的更多相关文章
- python 单例与数据库连接池 及相关选择
单例:专业用来处理连接多的问题(比如连接redis,zookeeper等),全局只有一个对象 单例代码 def singleton(cls): instances = {} def _singleto ...
- python单例(重点)
单例 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题的成熟的 ...
- Python——单例设计模式
单例设计模式: 让类创建的对象,在系统中只有唯一的实例, 使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用 ...
- python 基础 9.5 数据库连接池
一. 数据库连接池 python 编程中可以使用MySQLdb 进行数据库的连接及诸如查询,插入,更新等操作,但是每次连接mysql 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...
- Python单例
01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...
- 关于python单例的常用几种实现方法
这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到, 所以这里把之前用过的不同方式实现的单例方式整理一下 装饰器的方式 这种方式也是工作中经常用的一种 ...
- Python 单例
方法1: 1 class Singleton(object): def __new__(cls, *args, **kwargs): if '_inst' not in vars(cls): cls. ...
- python 单例实现
class View: _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._insta ...
- Python 单例设计模式
class Foo: def __init__(self, name, age): self.name = name self.age = age def show(self): print(self ...
随机推荐
- Java+Selenium3自动化测试框架设计系列--href="javascript:void(0)"如何获得元素定位
经过前面两篇文章的铺 垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题.我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的 tab窗口打开页面B,这个时候,你 ...
- oracle 游标例子
CREATE OR REPLACE PROCEDURE PRC_WAP_ACTIVEUSERS(RETCODE OUT VARCHAR2) /***************************** ...
- spring location设置本地路径
<context:property-placeholder location="file:D:/jdbc.properties"/> 直接在路径前加上 file:
- 异常处理中try,else,finally含有return的情况解析
直接看代码,拿到你的py下运行测试一下就 明白了. 例一: def f(): try: print() finally: print() print(f()) # 若注释掉finally内的retur ...
- CSS层叠样式表的解释
css: 在标签上设置style属性css注释: /*z注释内容*/css样式的编写位置: 1.在标签的的style属性里 2.在head里面,style标签中写样式 ...
- 【leetcode】19. 删除链表的倒数第N个节点
描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变 ...
- NLP系列-中文分词(基于统计)
上文已经介绍了基于词典的中文分词,现在让我们来看一下基于统计的中文分词. 统计分词: 统计分词的主要思想是把每个词看做是由字组成的,如果相连的字在不同文本中出现的次数越多,就证明这段相连的字很有可能就 ...
- k8s第一个实例创建redis集群服务
1.创建redis-master-controller.yaml apiVersion: v1 kind: ReplicationController metadata: name: redis-ma ...
- html页面简单制作示例
内有表格布局,具体见 链接: https://pan.baidu.com/s/1V7IcxQ5M-iXVdlzuf8bo-A 密码: 8dp8
- linux安装mysql之设置远程访问权限
1.将3306端口加入防火墙 /sbin/iptables -I INPUT -p tcp --dport 3306-j ACCEPT #添加端口3306/etc/rc.d/init.d/iptab ...