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 ...
随机推荐
- 为什么我要放弃javaScript数据结构与算法(第一章)—— JavaScript简介
数据结构与算法一直是我算比较薄弱的地方,希望通过阅读<javaScript数据结构与算法>可以有所改变,我相信接下来的记录不单单对于我自己有帮助,也可以帮助到一些这方面的小白,接下来让我们 ...
- 详解 RPL、DPL、CPL 的关系
保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别,使大多数情况下都只和同级代码发生关系.Intel的80286以上的cpu可以识別4个特权级(或特权层) ,0级到3级.数 ...
- C#中Equals和= =(等于号)的比较)(转载)
C#中Equals和= =(等于号)的比较) 相信很多人都搞不清Equals和 = =的区别,只是零星的懂一点,现在就让我带大家来进行一些剖析 一. 值类型的比较 对于值类型来说 ...
- 12 TCP服务器 进程 线程 非阻塞
1.单进程服务器 from socket import * serSocket = socket(AF_INET, SOCK_STREAM) # 重复使用绑定的信息 serSocket.setsock ...
- express与ejs,ejs在Linux上面的路径问题
1.学习使用ejs模板(这个是ejs.js) var express = require('express'); var app = express(); app.set("view eng ...
- cgi、fastcgi、php-cgi、php-fpm的关系
1. CGI CGI全称是"公共网关接口"(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其 ...
- 使用Cydia Substrate Hook Android Java世界
从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功. 后来搜到Cydia Substrate,看了几篇文章,进入官网查看了一下文档, ...
- python发起请求提示UnicodeEncodeError
具体错误: UnicodeEncodeError: 'latin-1' codec can't encode characters in position 73-74: Body ('测试') is ...
- Win7系统下删除文件时出现“正在准备再循环”的解决方法
今天,笔者在备份文件的时候,将一个word文档从移动硬盘复制到桌面.经过一系列“复(meng)杂(bi)”的操作之后,笔者突然发现,文件无法删除了.当右键文件点击“删除”时,出现对话框显示“正在准备 ...
- BZOJ 3670 NOI2014 动物园 KMP+dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3670 题意概述:令num[i]表示字符串由1~i的字符形成的前缀中不相重叠的相同前后缀的数 ...