当前位置: 首页 > news >正文

pythonFlask 使用 SQLAlchemy 的连接池

相比于上篇写的DBUtils,SQLAlchemy 是一个功能更为强大的 Python 库,它不仅支持 ORM,还支持与关系数据库的直接交互。通过 SQLAlchemy,我们可以非常方便地创建和管理数据库连接池,大多数情况下,连接池是默认启用的,并且可以根据需要进行配置。下面是用 Python 和 SQLAlchemy 创建并配置连接池的一些步骤:

目录

1、安装 SQLAlchemy

2、进行连接池基本配置

2.1 连接池参数详解

3、基本使用方式

3.1 直接执行sql

3.2 使用session

3、Flask集成示例


1、安装 SQLAlchemy

首先,确保安装了 SQLAlchemy 和你所需的数据库驱动程序,例如 pymysql 用于 MySQL。

pip install sqlalchemy pymysql

2、进行连接池基本配置

以下是使用 SQLAlchemy 创建连接池的基本代码示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker# 创建数据库连接 URI
DATABASE_URI = 'mysql+pymysql://user:password@localhost/dbname'# 创建 SQLAlchemy 引擎,并通过参数配置连接池
engine = create_engine(DATABASE_URI,pool_size=5,          # 连接池的大小,默认为 5max_overflow=10,      # 连接池中允许超过 pool_size 的最大连接数,超出部分会被释放pool_timeout=30,      # 等待连接的超时时间,默认是 30 秒pool_recycle=1800     # 连接回收时间,断开重连之前的时间,以秒为单位;可以防止过期连接使用
)
2.1 连接池参数详解

参数

说明

推荐值

pool_size

连接池保持的连接数

5-20

max_overflow

允许超过pool_size的连接数

5-10

pool_recycle

连接回收时间(秒)

3600

pool_timeout

获取连接的超时时间(秒)

30

pool_pre_ping

执行前检查连接有效性

True

pool_use_lifo

使用LIFO(后进先出)策略

True

3、基本使用方式

3.1 直接执行sql
  • 直接操作数据库连接,适合执行原生SQL,返回原始数据行(类似DB-API接口)
  • 需要精细控制SQL或高性能场景 → 选择 engine.connect()
with engine.connect() as connection:result = connection.execute("SELECT * FROM users")for row in result:print(row)
3.2 使用session
  • 提供对象关系映射(ORM)功能,返回模型对象,自动管理事务和对象状态
  • 需要对象关系映射或复杂业务逻辑​ → 选择 Session
from sqlalchemy.orm import sessionmaker# 创建会话
Session = sessionmaker(bind=engine)# 使用会话进行数据库操作
def perform_query():session = Session()  # 创建会话实例try:result = session.execute("SELECT * FROM your_table").fetchall()print(result)finally:session.close()  # 会话使用完毕后关闭# 执行查询
perform_query()

3、Flask集成示例

from flask import Flask, g
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmakerapp = Flask(__name__)engine = create_engine('mysql+pymysql://user:pass@localhost/db',pool_size=10,max_overflow=5,pool_recycle=3600
)# 使用scoped_session确保线程安全
db_session = scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine)
)@app.teardown_appcontext
def shutdown_session(exception=None):db_session.remove()@app.route('/users')
def get_users():"""使用ORM的query方法查询所有用户"""users = db_session.query(User).all()return {'users': [user.to_dict() for user in users]}


文章转载自:

http://prLrEQmJ.tktcr.cn
http://m1ARZGzR.tktcr.cn
http://PHz20V0m.tktcr.cn
http://LrazeaPi.tktcr.cn
http://xpQBEb9R.tktcr.cn
http://a3VJ1u4y.tktcr.cn
http://DYaSBkZt.tktcr.cn
http://jlk8tJeD.tktcr.cn
http://mPA7LBX0.tktcr.cn
http://DvXsOwt4.tktcr.cn
http://MmecLPDh.tktcr.cn
http://WbtooO7z.tktcr.cn
http://TvgSTngy.tktcr.cn
http://PkM92oB8.tktcr.cn
http://Umy6Ozos.tktcr.cn
http://34k3la9o.tktcr.cn
http://wDIoxP4Z.tktcr.cn
http://GDLRnJy4.tktcr.cn
http://SbBqU3Fo.tktcr.cn
http://UbinPV0n.tktcr.cn
http://bioPKh0N.tktcr.cn
http://MoVubYP6.tktcr.cn
http://6AqyXrWx.tktcr.cn
http://qbbY3dfD.tktcr.cn
http://5fhLAtNf.tktcr.cn
http://74aa9N2c.tktcr.cn
http://9JyiyPg6.tktcr.cn
http://0ZyKU5gr.tktcr.cn
http://zSHirTas.tktcr.cn
http://RqynwhgD.tktcr.cn
http://www.dtcms.com/a/376910.html

相关文章:

  • 【系统架构设计(25)】Web应用服务器与现代架构
  • minikube 的 kubernetes 入门教程-Nginx Proxy Manager
  • ‌Git Bisect 二分查找定位错误总结
  • 基于大数据挖掘的药品不良反应知识整合与利用研究
  • Git 命令教程
  • springboot synchronized 本地锁入门与实战
  • 【竞赛系列】机器学习实操项目08——全球城市计算AI挑战赛(数据可视化分析)
  • Nginx 实战系列(八)—— Nginx SSL/TLS 配置指南
  • Python函数详解及*args、**kwargs用法
  • 零基础3个月上岸[特殊字符]自学数据分析路线
  • Java多线程(一)
  • pyspark读取hive表中数据后进行lgb建模
  • LeetCode 热题 42.接雨水(双指针写法)
  • 带你走进vue的响应式底层
  • 【算法--链表】117.填充每个节点的下一个右侧节点指针Ⅱ--通俗讲解
  • BFS与FloodFill算法简介与实战
  • 闭包面试题
  • el-table表头做过滤
  • LaTeX 中给单个/部分参考文献标记颜色(BibTeX 文献引用)
  • 深入探讨讲解MOS管工作原理-ASIM阿赛姆
  • 环境变量_进程地址空间
  • 文档抽取技术:革新合同管理,提升效率、准确性和智能化水平
  • 关于CSDN中图片无法粘贴的问题解决办法
  • 初始python
  • webshell上传方式
  • 图论2 图的数据结构表示
  • 09使用Python操作MySQL
  • 视频加水印,推荐使用运营大管家-视频批量加水印软件
  • Golang适配器模式详解
  • 【Linux】jar文件软链接和硬链接的操作区别