pymysql 连接池

  

复制代码
import pymysql
from pymysql.cursors import DictCursor
from queue import Queue
import threading
class Pool:
    def __init__(self,size,*args,**kwargs):
        self._size=size
        self._pool=Queue(size)
        self.local=threading.local()
        for _ in range(size):
            conn=pymysql.connect(*args,**kwargs)
            self._pool.put(conn)

    @property
    def size(self):
        return self._pool.qsize()

    def acquire(self):
        return self._pool.get()

    def release(self,conn:pymysql.connections.Connection):
        if isinstance(conn,pymysql.connections.Connection):
            self._pool.put(conn)

    def __enter__(self):
        if getattr(self.local,'conn',None) is None:
            self.local.conn=self.acquire()
        return self.local.conn.cursor(cursor=DictCursor)

    def __exit__(self,exc_type,exc_value,exc_tb):
        if exc_type:
            self.local.conn.rollback()
        else:
            self.local.conn.commit()
        self.release(self.local.conn)
        self.local.conn=None

pool=Pool(5,'localhost','root','cruces','uranus')

with pool as cursor:
    with cursor:
        sql='select * from pp where id in (%(a)s,%(b)s,%(c)s)'
        cursor.execute(sql,{'a':3,'b':6,'c':7})
        print(cursor.fetchall())
        sql='show processlist'
        cursor.execute(sql,args=None)
        for b in cursor:
            print(b)

# conn=pool.acquire()
# print(conn)
# print(pool.size)
# cursor=conn.cursor(cursor=DictCursor)
# cursor.execute('select * from pp')
# # print(cursor.fetchall())
# pool.release(conn)
# print(pool.size)
复制代码

 

复制代码
import pymysql
from pymysql.cursors import DictCursor

conn=None
cursor=None
try:
    conn=pymysql.connect('localhost','root','cruces','uranus')
    print(conn.password)
    print(conn.ping(False))
    conn.__ent
    with conn.cursor(cursor=DictCursor) as cursor:
        d={'id':'5 or 1'}
        sql='select * from pp where id=%(id)s'
        print(cursor.execute(sql,d))
        cursor.rownumber=-cursor.rowcount
        print(cursor.fetchone())

    cursor.execute('select 1')

    conn.commit()
# except:
#     conn.rollback()
finally:
    if conn:
        conn.close()
复制代码

 

posted @   ascertain  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示