首页 > 数据库 >Python - 数据库连接池

Python - 数据库连接池

时间:2024-05-15 22:09:59浏览次数:15  
标签:Python 数据库 db connection 连接池 self conn

目录

SQLite 自定义连接池

import sqlite3
from queue import Queue


class SQLiteConnectionPool:

    def __init__(self, db_path, max_connection=10):
        self.db_path = db_path  # 数据库文件路径
        self.max_connection = max_connection  # 最大连接数
        self.free_connections = Queue(maxsize=max_connection)  # 存储空闲连接的队列

    def get_connection(self):
        """ 从连接池获取一个数据库连接"""

        if self.free_connections.empty():
            conn = sqlite3.connect(self.db_path)
        else:
            conn = self.free_connections.get()
        return conn

    def put_connection(self, conn):
        """将一个数据库连接放回连接池"""
        self.free_connections.put(conn)

该连接池的使用方法:

pool = SQLiteConnectionPool('douban.db')


def access(pool: SQLiteConnectionPool):
    conn = pool.get_connection()
    cur = conn.cursor()
    cur.execute("select * from douban limit 10")

    for item in cur.fetchall():
        print(item)

    pool.put_connection(conn) # 将连接返回连接池

使用 sqlalchemy 创建连接池

from sqlalchemy import create_engine, text

def access():
    engine = create_engine('sqlite:///douban.db', pool_size=10)
    with engine.connect() as conn:
        result = conn.execute(text('select * from douban limit 10'))
        for item in result:
            print(item)

通过使用连接池,我们有效地减少了连接数据库的开销,并且使数据库连接变得更简单、更稳定。尤其是在Web 应用 和数据密集型服务中,使用连接池技术可以大大提高性能和用户体验

标签:Python,数据库,db,connection,连接池,self,conn
From: https://www.cnblogs.com/czzz/p/18194794

相关文章

  • Garnet:微软官方基于.NET开源的高性能分布式缓存存储数据库
    前言前不久Redis宣布从Redis7.4开始,将原先比较宽松的BSD源码使用协议修改为RSALv2和SSPLv1协议,该协议变化意味着Redis不再开源。今天给大家分享一款完全开源(MIT协议)、免费的Redis替代性项目产品:Garnet。Redis开源协议详情:https://github.com/redis/redis?tab=License-......
  • 【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码
    问题描述对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答当然可以,AzurePortal上操作的所有资源都是通过RESTAPI来实现的,所以只要找到正确的API,就可以通过浏览器中抓取到的请求B......
  • Redis连接池
    【一】Redis连接池的优点​ Redis连接池的存在主要是为了优化Redis客户端和Redis服务器之间的连接管理,提升性能和稳定性。具体而言,Redis连接池具有以下几个优点:提升响应速度:由于连接池中已经存在可用的连接,客户端可以快速获取连接并执行操作,而不需要等待新的连接建立过程。这......
  • python操作redis
    redis安装:https://github.com/tporadowski/redis/releases/一python操作redis1普通链接pipinstallredisimportredisconn=redis.Redis(host="localhost",port=6379,db=0,password=None)conn.set('name','lqz')con......
  • [HDCTF 2023]YamiYami python中的另一种反序列化--yaml
    今天做了到新颖的题,关于python中的yaml反序列化的题目,直接上题吧。发现第一个链接的参数是?url=XXXX,一眼利用点。嗯?直接出了flag,应该是非预期解。再看看有app.py,那就试试。发现app.*被过滤了,二次编码绕过试试。点击查看代码@app.route('/')defindex():session['pas......
  • Python: SunMoonTimeCalculator
     #encoding:utf-8#版权所有2024©涂聚文有限公司#许可信息查看:#描述:https://github.com/Broham/suncalcPy#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#Datetime:2024/5/1421:59#User:geovindu#Product......
  • 流畅的python--第四章
    Unicode文本和字节序列字符串是较简单的概念,一个字符串就是一个字符序列。问题在于“字符”是如何定义的。在2021年,“字符”的最佳定义是Unicode字符。因此从Python3的str对象中获取的项是Unicode字符。Unicode标准明确区分字符的标识和具体的字节表述。字符的标识,即码点,是0~1......
  • 接口自动化框架【python+requests+pytest+allure】需要安装的依赖包
    attrs23.2.0certifi2024.2.2cffi1.16.0charset-normalizer3.3.2colorama0.4.6cryptography42.0.5h110.14.0idna3.6iniconfig2.0.0outcome1.3.0.post0packaging24.0pluggy1.4.0pycparser2.21pyOpenSSL24.1.0PySocks1.7.1pytest8.1.1selenium4.2.0sniffio1.3.1......
  • Nacos2.2.0适配瀚高数据库,打镜像部署
    一、Nacos2.2.0适配瀚高数据库Nacos2.2.0适配瀚高数据库部分参考地址:https://blog.csdn.net/weixin_39676699/article/details/130642890application.properties配置文件中数据库部分配置如下:spring.sql.init.platform=highgodb.num=1db.url.0=jdbc:highgo://192.168.1.1:58......
  • Oracle数据库给某个PDB下面的用户设置密码永不过期
    切换到PDB:使用ALTERSESSIONSETCONTAINER语句切换到PDB,如下所示:ALTERSESSIONSETCONTAINER=PDB;确保密码策略允许永不过期:ALTERPROFILEDEFAULTLIMITPASSWORD_LIFE_TIMEUNLIMITED;这个命令会将默认配置修改为密码永不过期。然后,将用户的密码设为过期并立即修......