SQLAlchemy会话与事务控制
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 概述 事务是指一组原子性的SQL查询.或者是一个或多个SQL语句组成的独立工作单元:MyISAM不流行的原因很大是因为其不支持事务的处理功能. 2 事务日志 事务日志定义属性,有些参数可以运行 ...
- MySQL索引创建、删除及事务控制
文章目录 一.索引概述 二.索引的优点与缺点 三.创建索引的原则依据 四.索引的分类与创建 4.1 索引的分类 4.2 索引的创建 4.2.1 普通索引 4.2.2 唯一索引 4.2.3 全文索引 4 ...
- 【spring】编程式事务控制
结构: AccountServiceImpl package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import c ...
- 【Spring】spring基于注解的声明式事务控制
结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...
- 【spring】spring基于xml的声明式事务控制
结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...
- 【Spring】事务控制API
Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...
- 【Spring】基于xml实现事务控制(银行转账)
代码结构 domain类 package com.itheima.domain;import java.io.Serializable;/*** 账户的实体类*/ public class Accou ...
- 【Spring】通过动态代理改进银行转账事务控制
前情 银行转账的案例中,通过给业务层实现类中每个方法中通过事务控制方法添加事务控制,保证每个方法在执行时只有一个数据库连接,通过事务保证整个方法要成功全部成功,要失败都失败. 问题 业务层实现类添加事 ...
- 在C#中使用COM+实现事务控制
.NET技术是微软大力推广的下一代平台技术,自从.NET技术架构的正式发布,此项技术也逐渐走向成熟和稳定.按照微软的平台系统占有率,我们不难想象得到,在未来的一两年内.NET技术必定会势如破竹一般的登 ...
最新文章
- html5怎么实现自动缩放图片,如图,html5开发的手机端web在线客服聊天,如何实现图片点击放大,捏合缩放功能?...
- 鸿蒙系统真实评测,鸿蒙系统和安卓的区别-华为鸿蒙系统使用体验评测
- ajax后台重定向会返回什么_第三十五天JavaScript中的ajax
- POJ 1182 食物链,并查集的拓展
- 20175320 2018-2019-2 《Java程序设计》第4周学习总结
- android ListView ListSelector 不起作用(被覆盖)
- php和app关系,请教一下,app和微信 两个共通的问题
- Android 开发 带图像的Toast提示
- Android 手动解析JSON数据
- anaconda怎么打开python3.7,使用anaconda更新到python 3.7
- Eprime 倒计时代码
- 【交换安全】DAI - Dynamic ARP Inspection 详解/arp欺骗/gratuitous arp
- 测试要找苹果机型,哪里有?
- 1990年图灵奖--费尔南多·考巴脱简介
- sql如何进行脱敏操作_股市入门基本知识丨大阳线出现后如何进行短线操作
- MFC 子对话框多了任务栏图标?
- 服务器固态硬盘当作系统盘,只当系统盘太屈才,这些地方都能用上固态硬盘!...
- 深入Java集合系列之七:Hashtable
- 教你如何查看SpringCloud Alibaba、Spring Clou 和 SpringBoot对应版本
- matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
热门文章
- 如何清空c盘只剩系统_电脑系统c盘满了怎么清理释放空间【图文】-系统城
- 三星电脑计算机主板图,三星(Samsung)900X3A-A05US笔记本电脑拆解图评测-ZOL中关村在线...
- java ssm网上飞机票预订系统
- excel匹配_EXCEL编码匹配名称,秘书:1分钟搞定,领导:小心数据绿帽子
- 九州云腾双因素认证系统_“等保2.0”新标准落地 双因子认证(2FA)成标配...
- windowBuilder Pro下载
- 数据结构笔记7:排序
- 公用商标被恶意注册,有卖家产品被投诉下架;亚马逊澳洲站上线新西兰出口计划;TikTok总下载量突破30亿…|洞悉跨境
- 位势函数matlab,势函数分类的设计与SOM神经网络
- vue移动组件vant官网打不开的解决方法