0. 前言

  • 最近是使用 SQLAlchemy 框架作为一个 ORM 框架,现对其做简单整理

1. 创建 Session

  • 说到数据库,就离不开 Session。Session 的主要目的是建立与数据库的会话,它维护数据库的连接,也是数据库查询(Query)的一个入口
  • 在SQLAlchemy中,数据库的查询操作是通过 Query 对象来实现的。而 Session 提供了创建 Query 对象的接口
  • Query 对象返回的结果是一组同一映射对象组成的集合
    • 集合中的一个对象,对应于数据库表中的一行(即一条记录)
    • 所谓同一映射,是指每个对象有一个唯一的 ID。如果两个对象(的引用)ID 相同,则认为它们对应的是相同的对象
  • 要完成数据库查询,就需要建立与数据库的连接。这就需要用到 Engine 对象。一个 Engine 可能是关联一个 Session 对象,也可能关联一个数据库表
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker some_engine = create_engine('nysql://username:password@localhost/mydb?charset=utf8') ession = sessionmaker(bind=some_engine) session = Session()
  • Session 最重要的功能是实现原子操作:
class SomeThing(object):
def go(self, session):
# Do something def run_my_program():
session = Session()
try:
SomeThing().go(session)
session.commit()
except:
session.rollback()
raise
finally:
session.close()

2. 生命周期

  • SQLAlchemy 提供了一个简单的 session 管理机制,即 scoped session
  • 它采用的注册模式。所谓的注册模式,简单来说,是指在整个程序运行的过程当中,只存在唯一的一个 session 对象
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker session_factory = sessionmaker(bind=some_engine)
some_session = Session() # 全局唯一,session1 = Session() 和 session2 = Session() 引用相同,除非其中一个先销毁
  • scoped session 本质上是一个全局变量。可是,如果直接把 session 定义成全局变量,在多线程的环境下,会造成线程同步的问题
  • 为此,scoped session 在默认情况下,采用的线程本地化存储方式。也就是说,每个线程的 session 对象是不同的。这样,不同线程对数据库的操作不会相互影响

3. 参考文献

SQLAIchemy 学习(一)Session 相关的更多相关文章

  1. Servlet的学习之Session(3)

    在上一篇<Servlet的学习之Session(2)>我们知道了Session能实现一个会话过程中保存数据或者多个会话中实现同一个Session的关键因素就是Cookie,只是Cookie ...

  2. Servlet的学习之Session(2)

    在上一篇中我们学习了Session对象默认在一个会话过程中,由服务器创建,能保存在这个会话过程中用户访问多个web资源时产生的需要保存的数据,并在访问服务器中其他web资源时可以将这些数据从Sessi ...

  3. Servlet的学习之Session(1)

    在学习完了Servlet中的Cookie技术后,我们再来学习另一个能保存会话数据的技术——Session. Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其 ...

  4. 面试回顾——session相关

    原地址:https://blog.csdn.net/quiet_girl/article/details/50580095 Session结束生命周期的几种情况: (1)客户端关闭浏览器(只针对ses ...

  5. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  6. Oracle session相关数据字典(一)

    (一)session相关视图 (1)视图 v$session v$active_session_history dba_hist_active_session_history 如果是多节点数据库,v$ ...

  7. Spark学习之基础相关组件(1)

    Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台. 2. Spark的一个主要特点是能够在内存中进行计算,因而更快. 3. RDD(resilient di ...

  8. ThreeJS学习6_几何体相关(BufferGeometry)

    ThreeJS学习6_几何体相关(BufferGeometry) 使用 BufferGeometry 可以有效减少向 GPU 传输几何体相关数据所需的开销 可以自定义顶点位置, 面片索引, 法向量, ...

  9. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

随机推荐

  1. 在IT产品白皮书中遇到的缩略词

    在IT产品白皮书中遇到的缩略词 更新中...

  2. Logstash:处理多个input

    Logstash:处理多个input Logstash的整个pipleline分为三个部分: input插件:提取数据. 这可以来自日志文件,TCP或UDP侦听器,若干协议特定插件(如syslog或I ...

  3. Maven配置教程详解

    Maven的安装与配置 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载以下maven安装包 解压缩即可 根据你的安装路径配置maven环境变量 ...

  4. WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用

    背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...

  5. Git多账号配置

    在一台电脑上配置多个不同的 ssh key 前言 如果拥有多个Git远程仓库,尤其是其中一个是工作中使用的仓库,只使用一个ssh key安全性很低,建议为不同Git远程仓库配置不同的ssh key. ...

  6. Google开发者F12工具面板-network详解

    1 开发者工具面板    面板上包含了Elements面板.Console面板.Sources面板.Network面板.Performance面板.Memory面板.Application面板.Sec ...

  7. 高强度学习训练第一天总结:Java内存区域

    ---恢复内容开始--- 程序计数器: 程序计数器(Program Counter Register) 是一块较小的空间,他可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念 ...

  8. https抓包 Fiddler

    打开Fiddler https抓包 安装证书 查看证书 打开Windows程序certmgr.msc 查找Fiddler证书 查看Fiddler证书是否安装成功 测试连接 使用Google Chrom ...

  9. Web Service 接口测试

    Web Service 接口测试 Web service 概念 Web service使用与平台和编程语言无关的方式进行通讯的一项技术, web service 是一个接口, 他描述了一组可以在网络上 ...

  10. 关与 @EnableConfigurationProperties 注解

    @EnableConfigurationProperties注解的作用是: 让使用 @ConfigurationProperties 注解的类生效. 当@EnableConfigurationProp ...