单例:专业用来处理连接多的问题(比如连接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 单例与数据库连接池 及相关选择的更多相关文章

  1. python单例与数据库连接池

    单例:专业用来处理连接多的问题(比如连接redis,zookeeper等),全局只有一个对象 单例代码def singleton(cls): instances = {} def _singleton ...

  2. python单例(重点)

    单例 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题的成熟的 ...

  3. Python——单例设计模式

    单例设计模式: 让类创建的对象,在系统中只有唯一的实例, 使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用 ...

  4. python 基础 9.5 数据库连接池

      一. 数据库连接池    python 编程中可以使用MySQLdb 进行数据库的连接及诸如查询,插入,更新等操作,但是每次连接mysql 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

  5. Python单例

    01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...

  6. C3P0数据库连接池的相关bug解决

    数据库连接池的几个常见bug: 1.警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@76c7022e -- ...

  7. 关于python单例的常用几种实现方法

    这两天在看自己之前写的代码,所以正好把用过的东西整理一下,单例模式,在日常的代码工作中也是经常被用到, 所以这里把之前用过的不同方式实现的单例方式整理一下 装饰器的方式 这种方式也是工作中经常用的一种 ...

  8. 性能超过DRUID的最强数据库连接池——HikariCP相关配置及简单示例

    在配置application.yml时,对hikari的配置会有这样一个字段validationQuery. validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一 ...

  9. Python 单例

    方法1: 1 class Singleton(object): def __new__(cls, *args, **kwargs): if '_inst' not in vars(cls): cls. ...

随机推荐

  1. 【ARM-Linux开发】Linux链接 -ln

    ln命令是Linux中的一个非常重要的命令,它为一个文件在另一位置创建同步链接,有两种:符号链接和硬链接. [ln命令详解]ln [options] source dist 常用参数: -f : 链接 ...

  2. C/C++.字符串分割

    1.ZC:只测试使用了 自己改编的函数SplitStr_ZZ(...),其它的 未测试 #include <string> #include <vector> #include ...

  3. HanLP-地名识别调试方法

    HanLP收词特别是实体比较多,因此特别容易造成误识别.下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确. 类型1 数字 ...

  4. rownum伪行号-排行榜-分页

    rownum伪行号-排行榜-分页 1.rownum 是oracle数据库特有的一个特性,它针对每一个查询(包括子查询),都会生成一个rownum用于对该次查询进行编号 2.每个rownum只针对当前s ...

  5. 小菜鸟之crond

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  6. redis主从复制初识

    一.作用 slave会通过被复制同步master上面的数据,形成数据副本 当master节点宕机时,slave可以升级为master节点承担写操作. 允许有一主多从,slave可以承担读操作,提高读性 ...

  7. mybatis缓存机制与装饰者模式

    mybatis 缓存 MyBatis的二级缓存的设计原理 装饰者模式

  8. HttpServletResponse对象(转)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  9. Kubernetes---网络通讯模式笔记

    ⒈kubernetes网络通讯模式     Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网 ...

  10. Windows一键设置环境变量(以设置java环境变量为例)

    右击以管理员方式运行 JDKSetting.bat   @echo off color 0a echo.------------------------------------ echo.TODO:设 ...