1、简介:

SQLAlchemy 的 session 是用于管理数据库操作的一个像容器一样的东西. 模型实例对象本身独立存在, 而要让其修改(创建)生效, 则需要把它们加入某个 session 。同时你也可以把模型实例对象从 session 中去除。

被 session 管理的实例对象:

session.commit() 直接将数据库内存中的数据提交到数据库,此操作会内部调用session.flush(),其余的事务可以访问最新的数据;

session.rollback() 是回滚当前事务的变更数据操作;

session.flush() 的作用是在事务管理内与数据库发生交互, 对应的实例状态被反映到数据库,比如自增 ID 被填充上值,但是数据库中当前事务的数据值并未更新上;相当于预提交,等于提交到数据库内存,还未写入数据库文件;deletions and modifications to the database as INSERTs, DELETEs, UPDATE;

session.merge(obj) 查询更新操作;就是更新之前先查询,如果没有自动插入;

2、操作事务的几种模式

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import SQLAlchemyErrorDB_CONNECT_STRING = 'mysql+pymysql://root:@localhost/my_test?charset=utf8'
# engine = create_engine(DB_CONNECT_STRING, echo=True)   # echo=True会打印出来orm执行的sql语句
engine = create_engine(DB_CONNECT_STRING)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
  •  简易更新操作

try:user = session.Query(User).first()user.name = u'改名字session.commit()
except:session.rollback()
  •  复杂事务嵌套上下文

注意:begin_nested创建一个嵌套事务,事务的提交最后由外层的commit执行,with执行完毕,内层session自动托管到外层事务上

t1 = Admin(username='test', password='123456')       # 生成admin表要插入的一条数据
t2 = Admin(username='test1', password='abcdef')      # 生成admin表要插入的一条数据session.add(t2)try:with session.begin_nested():session.add(t1)  # 或使用session.merge(t1),表示查询更新操作
except Exception as e:print(e)session.rollback()session.commit()
  • 简易嵌套
t1 = Admin(username='test1', password='123456')       # 生成admin表要插入的一条数据
t2 = Admin(username='test2', password='abcdef')      # 生成admin表要插入的一条数据session.add(t2)# 创建一个子嵌套事务,第一个commit只是将子事务的数据托管到父事务,并未提交到数据库
session.begin_nested()
session.add(t1)
session.commit()# 父事务执行提交,才真正将t1,t2提交到数据库
session.commit()

SQLAlchemy会话与事务控制相关推荐

  1. 数据库 之 事务控制和隔离级别

    1  概述 事务是指一组原子性的SQL查询.或者是一个或多个SQL语句组成的独立工作单元:MyISAM不流行的原因很大是因为其不支持事务的处理功能. 2  事务日志 事务日志定义属性,有些参数可以运行 ...

  2. MySQL索引创建、删除及事务控制

    文章目录 一.索引概述 二.索引的优点与缺点 三.创建索引的原则依据 四.索引的分类与创建 4.1 索引的分类 4.2 索引的创建 4.2.1 普通索引 4.2.2 唯一索引 4.2.3 全文索引 4 ...

  3. 【spring】编程式事务控制

    结构: AccountServiceImpl package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import c ...

  4. 【Spring】spring基于注解的声明式事务控制

    结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...

  5. 【spring】spring基于xml的声明式事务控制

    结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...

  6. 【Spring】事务控制API

    Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...

  7. 【Spring】基于xml实现事务控制(银行转账)

    代码结构 domain类 package com.itheima.domain;import java.io.Serializable;/*** 账户的实体类*/ public class Accou ...

  8. 【Spring】通过动态代理改进银行转账事务控制

    前情 银行转账的案例中,通过给业务层实现类中每个方法中通过事务控制方法添加事务控制,保证每个方法在执行时只有一个数据库连接,通过事务保证整个方法要成功全部成功,要失败都失败. 问题 业务层实现类添加事 ...

  9. 在C#中使用COM+实现事务控制

    .NET技术是微软大力推广的下一代平台技术,自从.NET技术架构的正式发布,此项技术也逐渐走向成熟和稳定.按照微软的平台系统占有率,我们不难想象得到,在未来的一两年内.NET技术必定会势如破竹一般的登 ...

最新文章

  1. html5怎么实现自动缩放图片,如图,html5开发的手机端web在线客服聊天,如何实现图片点击放大,捏合缩放功能?...
  2. 鸿蒙系统真实评测,鸿蒙系统和安卓的区别-华为鸿蒙系统使用体验评测
  3. ajax后台重定向会返回什么_第三十五天JavaScript中的ajax
  4. POJ 1182 食物链,并查集的拓展
  5. 20175320 2018-2019-2 《Java程序设计》第4周学习总结
  6. android ListView ListSelector 不起作用(被覆盖)
  7. php和app关系,请教一下,app和微信 两个共通的问题
  8. Android 开发 带图像的Toast提示
  9. Android 手动解析JSON数据
  10. anaconda怎么打开python3.7,使用anaconda更新到python 3.7
  11. Eprime 倒计时代码
  12. 【交换安全】DAI - Dynamic ARP Inspection 详解/arp欺骗/gratuitous arp
  13. 测试要找苹果机型,哪里有?
  14. 1990年图灵奖--费尔南多·考巴脱简介
  15. sql如何进行脱敏操作_股市入门基本知识丨大阳线出现后如何进行短线操作
  16. MFC 子对话框多了任务栏图标?
  17. 服务器固态硬盘当作系统盘,只当系统盘太屈才,这些地方都能用上固态硬盘!...
  18. 深入Java集合系列之七:Hashtable
  19. 教你如何查看SpringCloud Alibaba、Spring Clou 和 SpringBoot对应版本
  20. matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序

热门文章

  1. 如何清空c盘只剩系统_电脑系统c盘满了怎么清理释放空间【图文】-系统城
  2. 三星电脑计算机主板图,三星(Samsung)900X3A-A05US笔记本电脑拆解图评测-ZOL中关村在线...
  3. java ssm网上飞机票预订系统
  4. excel匹配_EXCEL编码匹配名称,秘书:1分钟搞定,领导:小心数据绿帽子
  5. 九州云腾双因素认证系统_“等保2.0”新标准落地 双因子认证(2FA)成标配...
  6. windowBuilder Pro下载
  7. 数据结构笔记7:排序
  8. 公用商标被恶意注册,有卖家产品被投诉下架;亚马逊澳洲站上线新西兰出口计划;TikTok总下载量突破30亿…|洞悉跨境
  9. 位势函数matlab,势函数分类的设计与SOM神经网络
  10. vue移动组件vant官网打不开的解决方法