sqlalchemy 学习(二)scoped session
2024-10-17 11:21:03
数据库设计的难点之一,是session生命周期的管理问题。sqlalchemy提供了一个简单的session管理机制,即scoped session。它采用的注册模式。所谓的注册模式,简单来说,是指在整个程序运行的过程当中,只存在唯一的一个session对象。
创建scoped session的方法如下
- from sqlalchemy.orm import scoped_session
- from sqlalchemy.orm import sessionmaker
- session_factory = sessionmaker(bind=some_engine)
- Session = scoped_session(session_factory)
scoped_session本质上也是一个方法,它首先通过session工厂创建session对象,然后对session对象进行相应的管理。
如果需要创建session对象,可执行下面的代码。
some_session = Session()
注意,由于scoped session采用的是注册模式,因此下面代码的session1和session2是一个相同的对象引用。
- session1 = Session()
- session2 = Session()
但是下面代码中的session1和session2是不同的对象引用。因为session2创建之前,session1已经被销毁。
- session1 = Session()
- session1.remove()
- session2 = Session()
介绍到这里,我们知道scoped session本质上是一个全局变量。可是,如果直接把session定义成全局变量,在多线程的环境下,会造成线程同步的问题。为此,scoped session在默认情况下,采用的线程本地化存储方式。也就是说,每个线程的session对象是不同的。这样,不同线程对数据库的操作不会相互影响。
最新文章
- Final-阶段站立会议6
- [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
- idea 清除svn登陆权限信息
- 为GDI函数增加透明度处理
- find command in linux terminal
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)
- AMQ学习笔记 - 09. Spring-JmsTemplate之接收
- MyBatis(3.2.3) - Handling the CLOB/BLOB types
- 帝国cms 列表页分页样式修改美化【1】
- 大整数算法[09] Comba乘法(原理)
- c# 发送Email的2中方式
- 使用腾讯云无服务器云函数(SCF)分析天气数据
- Docker进阶之一:Docker介绍与体系结构
- .NET开源快速开发框架Colder发布 (NET452+AdminLTE版)
- 提供HTML5播放RTSP流 提供微信播放RTSP流 HTML5支持rtsp web播放rtsp,微信支持rtsp
- VBA中查找并选定文字
- 简单的C#TCP协议收发数据示例
- day33-python阶段性复习七
- window10装机 nvem简介,针对于 联想R720系列
- 解决$ go get google.golang.org/grpc上的包被墙的问题