数据库设计的难点之一,是session生命周期的管理问题。sqlalchemy提供了一个简单的session管理机制,即scoped session。它采用的注册模式。所谓的注册模式,简单来说,是指在整个程序运行的过程当中,只存在唯一的一个session对象。

创建scoped session的方法如下

  1.  
    from sqlalchemy.orm import scoped_session
  2.  
    from sqlalchemy.orm import sessionmaker
  3.  
     
  4.  
    session_factory = sessionmaker(bind=some_engine)
  5.  
    Session = scoped_session(session_factory)

scoped_session本质上也是一个方法,它首先通过session工厂创建session对象,然后对session对象进行相应的管理。

如果需要创建session对象,可执行下面的代码。

some_session = Session()

注意,由于scoped session采用的是注册模式,因此下面代码的session1和session2是一个相同的对象引用。

  1.  
    session1 = Session()
  2.  
    session2 = Session()

但是下面代码中的session1和session2是不同的对象引用。因为session2创建之前,session1已经被销毁。

  1.  
    session1 = Session()
  2.  
    session1.remove()
  3.  
    session2 = Session()

介绍到这里,我们知道scoped session本质上是一个全局变量。可是,如果直接把session定义成全局变量,在多线程的环境下,会造成线程同步的问题。为此,scoped session在默认情况下,采用的线程本地化存储方式。也就是说,每个线程的session对象是不同的。这样,不同线程对数据库的操作不会相互影响。

最新文章

  1. Final-阶段站立会议6
  2. [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
  3. idea 清除svn登陆权限信息
  4. 为GDI函数增加透明度处理
  5. find command in linux terminal
  6. 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)
  7. AMQ学习笔记 - 09. Spring-JmsTemplate之接收
  8. MyBatis(3.2.3) - Handling the CLOB/BLOB types
  9. 帝国cms 列表页分页样式修改美化【1】
  10. 大整数算法[09] Comba乘法(原理)
  11. c# 发送Email的2中方式
  12. 使用腾讯云无服务器云函数(SCF)分析天气数据
  13. Docker进阶之一:Docker介绍与体系结构
  14. .NET开源快速开发框架Colder发布 (NET452+AdminLTE版)
  15. 提供HTML5播放RTSP流 提供微信播放RTSP流 HTML5支持rtsp web播放rtsp,微信支持rtsp
  16. VBA中查找并选定文字
  17. 简单的C#TCP协议收发数据示例
  18. day33-python阶段性复习七
  19. window10装机 nvem简介,针对于 联想R720系列
  20. 解决$ go get google.golang.org/grpc上的包被墙的问题

热门文章

  1. D3学习之地图
  2. 搭建 Spring 开发环境
  3. 第十节课-RNN介绍
  4. IE10下阿里旺旺无法快速登录解决办法
  5. Web Service简介
  6. scala学习手记3 - var和val
  7. Maven到底是个啥玩意
  8. Django1.11 的serializers序列化model
  9. 深入理解Lambda
  10. 【C#笔札】1 string类型(2)