• 12,DBUtils


    创建数据库连接池:

     1 import time
     2 import pymysql
     3 import threading
     4 from DBUtils.PooledDB import PooledDB, SharedDBConnection
     5 POOL = PooledDB(
     6     creator=pymysql,  # 使用链接数据库的模块
     7     maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
     8     mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
     9     maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
    10     maxshared=3,  # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
    11     blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    12     maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    13     setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    14     ping=0,
    15     # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    16     host='127.0.0.1',
    17     port=3306,
    18     user='root',
    19     password='123',
    20     database='pooldb',
    21     charset='utf8'
    22 )
    创建数据库连接池

    使用数据库连接池:

     1 def func():
     2     # 检测当前正在运行连接数的是否小于最大链接数,如果不小于则:等待或报raise TooManyConnections异常
     3     # 否则
     4     # 则优先去初始化时创建的链接中获取链接 SteadyDBConnection。
     5     # 然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。
     6     # 如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。
     7     # 一旦关闭链接后,连接就返回到连接池让后续线程继续使用。
     8     conn = POOL.connection()
     9 
    10     cursor = conn.cursor()
    11     cursor.execute('select * from tb1')
    12     result = cursor.fetchall()
    13     conn.close()
    使用数据库连接池中的链接

    自制sqlhelper

     1 class MySQLhelper(object):
     2     def __init__(self, host, port, dbuser, password, database):
     3         self.pool = PooledDB(
     4             creator=pymysql,  # 使用链接数据库的模块
     5             maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
     6             mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
     7             maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
     8             maxshared=3,
     9             # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
    10             blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    11             maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    12             setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    13             ping=0,
    14             # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    15             host=host,
    16             port=int(port),
    17             user=dbuser,
    18             password=password,
    19             database=database,
    20             charset='utf8'
    21         )
    22 
    23     def create_conn_cursor(self):
    24         conn = self.pool.connection()
    25         cursor = conn.cursor(pymysql.cursors.DictCursor)
    26         return conn,cursor
    27 
    28     def fetch_all(self, sql, args):
    29         conn,cursor = self.create_conn_cursor()
    30         cursor.execute(sql,args)
    31         result = cursor.fetchall()
    32         cursor.close()
    33         conn.close()
    34         return result
    35 
    36 
    37     def insert_one(self,sql,args):
    38         conn,cursor = self.create_conn_cursor()
    39         res = cursor.execute(sql,args)
    40         conn.commit()
    41         print(res)
    42         conn.close()
    43         return res
    44 
    45     def update(self,sql,args):
    46         conn,cursor = self.create_conn_cursor()
    47         res = cursor.execute(sql,args)
    48         conn.commit()
    49         print(res)
    50         conn.close()
    51         return res
    52 
    53 
    54 sqlhelper = MySQLhelper("127.0.0.1", 3306, "root", "1233121234567", "dragon")
    55 
    56 # sqlhelper.fetch_all("select * from user where id=%s",(1))
    57 
    58 # sqlhelper.insert_one("insert into user VALUES (%s,%s)",("jinwangba",4))
    59 
    60 # sqlhelper.update("update user SET name=%s WHERE  id=%s",("yinwangba",1))
    好使不好使,试试就知道了
     
     
     
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/10548025.html
Copyright © 2020-2023  润新知