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()
链接mysql等关系型数据库,应当采用此方式。确保多连接存在。
python 单例与数据库连接池 及相关选择的更多相关文章
- python单例与数据库连接池
单例:专业用来处理连接多的问题(比如连接redis,zookeeper等),全局只有一个对象 单例代码def singleton(cls): instances = {} def _singleton ...
- python单例(重点)
单例 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题的成熟的 ...
- Python——单例设计模式
单例设计模式: 让类创建的对象,在系统中只有唯一的实例, 使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用 ...
- python 基础 9.5 数据库连接池
一. 数据库连接池 python 编程中可以使用MySQLdb 进行数据库的连接及诸如查询,插入,更新等操作,但是每次连接mysql 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...
- Python单例
01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...
- C3P0数据库连接池的相关bug解决
数据库连接池的几个常见bug: 1.警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76c7022e -- ...
- 关于python单例的常用几种实现方法
这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到, 所以这里把之前用过的不同方式实现的单例方式整理一下 装饰器的方式 这种方式也是工作中经常用的一种 ...
- 性能超过DRUID的最强数据库连接池——HikariCP相关配置及简单示例
在配置application.yml时,对hikari的配置会有这样一个字段validationQuery. validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一 ...
- Python 单例
方法1: 1 class Singleton(object): def __new__(cls, *args, **kwargs): if '_inst' not in vars(cls): cls. ...
随机推荐
- python3 正则表达式 re模块之辣眼睛 计算器
额...学到几个常用模块了,也要其中考试了,每天晚上敲一点,敲得脑壳疼,不过又想到好一点的办法了,有时间再改吧. 此非吾所欲也,实属无奈也....复习之路漫漫,吾将到书上求索,在此不多逗留,我挥一挥衣 ...
- Charles系列一:Charles功能介绍、下载安装和界面简介
一:Charles主要功能介绍 Charles是一个HTTP代理/HTTP监视器/反向代理,使开发和测试人员能够查看机器和Internet之间所有的HTTP和SSL/HTTPS流量,这包括请求,响应. ...
- POJ2594 Treasure Exploration【DAG有向图可相交的最小路径覆盖】
题目链接:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K T ...
- webpack-dev-server 导致的 invalid host header
这几天做的一个项目,在这个项目的 js 方面,我将其分业务和功能的拆分成模块化,然后使用 webpack 来进行打包.(第一次在公司产品中使用 webpack) 然后使用了 webpack-dev-s ...
- 快速查看表结构 SQL server查看表注释以及字段注释表结构字段说明
DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'UserIntegralExchange'; --表名!!! SELECT CASE WHE ...
- mysql中比较实用的几个函数
1.曾有这样的需求: 可以使用如下函数: 语法:FIND_IN_SET(str,strlist). 定义: 1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间 ...
- Python基础总结之第七天开始【认识函数的参数以及返回】(新手可相互督促)
周日的早上,吃的饱饱,刷刷抖音,开始学习新一天的知识了~~~ 函数的参数: 昨天的笔记中,我们已经使用了参数,在案例中的name和sex 就是参数. 一般的函数都是有参数的,函数的参数都是放在函数定义 ...
- global和nonlocal的区别
global可以在任何地方修饰变量,而且被global修饰的变量直接被标识为全局变量,对该变量修改会影响全局变量的值,但不影响函数中未被global修饰的同名变量(依然是局部变量),nonlocal只 ...
- Abp 聚合测试
Abp 官网开始的教程例子,是IRpositoty<entity> 直接出现在应用层.但是如果是一个聚合根也会这样吗? 那么聚合根是访问仓储的最小单元,要通过聚合根来操作业务,就是实体, ...
- Git FLS的使用
克隆git地址后,一些文件内容被隐藏. 显示如下: version https://git-lfs.github.com/spec/v1oid sha256:xxxxxxxxxxxxxxxxxxxxx ...