当前位置: 首页 > news >正文

python sqlalchemy db.session 的commit()和colse()对session中的对象的影响

实验一:commit()之后查看stu的属性id,查看db.session是否改变

@db_test.route("/db_test",methods=["GET"])
def db_test():stu=StuTest()stu.stu_age=22stu.stu_name="nnannns"stu.stu_class=11print("session1:",id(db.session))print("--------11111:",stu in db.session)db.session.add(stu)print("--------22222:",stu in db.session)db.session.commit()print("id=",stu.id)print("session2:",id(db.session))print("--------33333:",stu in db.session)return "hello"

结果: 

session1: 2205376105296
--------11111: False
--------22222: True
id= 33
session2: 2205376105296
--------33333: True

结论:commit之后db.session对象仍然存在,并且stu对象仍然在db.session中。 

实验二:close()之后查看stu的属性id,查看db.session是否改变 

@db_test.route("/db_test",methods=["GET"])
def db_test():stu=StuTest()stu.stu_age=22stu.stu_name="nnannns"stu.stu_class=11print("session1:",id(db.session))print("--------11111:",stu in db.session)db.session.add(stu)print("--------22222:",stu in db.session)db.session.commit()db.session.close()print("id=",stu.id)print("session2:",id(db.session))print("--------33333:",stu in db.session)return "hello"

 结果:

session1: 2666995239888
--------11111: False
--------22222: True

 raise orm_exc.DetachedInstanceError(
sqlalchemy.orm.exc.DetachedInstanceError: Instance <StuTest at 0x26cf89568d0> is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: http://sqlalche.me/e/14/bhk3)

结论:close()之后会清除session中的已存在对象。

为了查看是否会清除session,暂时先将stu.id取值去掉

@db_test.route("/db_test",methods=["GET"])
def db_test():stu=StuTest()stu.stu_age=22stu.stu_name="nnannns"stu.stu_class=11print("session1:",id(db.session))print("--------11111:",stu in db.session)db.session.add(stu)print("--------22222:",stu in db.session)db.session.commit()db.session.close()print("session2:",id(db.session))print("--------33333:",stu in db.session)return "hello"

 结果:

session1: 2704349383504
--------11111: False
--------22222: True
session2: 2704349383504
--------33333: False

结论:close()并不会销毁session,而是清除之内的实例对象。 

实现三:db.create_scoped_session()创建新的session

@db_test.route("/db_test",methods=["GET"])
def db_test():stu=StuTest()stu.stu_age=22stu.stu_name="nnannns"stu.stu_class=11print("session1:",id(db.session))print("--------11111:",stu in db.session)db.session.add(stu)print("--------22222:",stu in db.session)db.session.commit()print("id=",stu.id)print("session2:",id(db.session))print("--------33333:",stu in db.session)db.session = db.create_scoped_session()print("--------44444:",stu in db.session)print("session3:",id(db.session))return "hello"

 session1: 2259114183632
--------11111: False
--------22222: True
id= 39
session2: 2259114183632
--------33333: True
--------44444: False
session3: 2259147304080

db.create_scoped_session()会创建新的session 

实验室四,新的session创建后,还能读到原来的对象及其属性吗?

@db_test.route("/db_test",methods=["GET"])
def db_test():stu=StuTest()stu.stu_age=22stu.stu_name="nnannns"stu.stu_class=11print("session1:",id(db.session))print("--------11111:",stu in db.session)db.session.add(stu)print("111 stu id:",id(stu))print("--------22222:",stu in db.session)db.session.commit()print("111 id=",stu.id)print("session2:",id(db.session))print("--------33333:",stu in db.session)db.session = db.create_scoped_session()print("--------44444:",stu in db.session)print("session3:",id(db.session))print("222 id=",stu.id)print("222 stu id:",id(stu))print("--------55555:",stu in db.session)return "hello"

打印:

session1: 2131572083344
--------11111: False
111 stu id: 2131571801616
--------22222: True
111 id= 45
session2: 2131572083344
--------33333: True
--------44444: False
session3: 2131605649744
222 id= 45
222 stu id: 2131571801616
--------55555: False 

结论:虽然生成了新的session,但是stu实例对象还是存在的,但是不存在session中了。还是能读到stu.id的。

到这里已经不明白了,有大神能解释这个原理吗?求解释。。。 

python sqlachemy的session可以查看这个:https://www.cnblogs.com/ChangAn223/p/11277468.html#%E4%BA%8C%E5%8D%95%E7%BA%BF%E7%A8%8B%E4%B8%8B-scoped_session-%E5%AF%B9%E5%88%9B%E5%BB%BA-session-%E7%9A%84%E5%BD%B1%E5%93%8D

相关文章:

python sqlalchemy db.session 的commit()和colse()对session中的对象的影响

实验一&#xff1a;commit&#xff08;&#xff09;之后查看stu的属性id,查看db.session是否改变 db_test.route("/db_test",methods["GET"]) def db_test():stuStuTest()stu.stu_age22stu.stu_name"nnannns"stu.stu_class11print("sessio…...

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…...

【ES6】JavaScript中Reflect

Reflect是JavaScript中的一个内建对象&#xff0c;它提供了一组方法&#xff0c;用于对对象和函数进行操作和检查。这些方法与内建对象的方法非常相似&#xff0c;但具有更高的灵活性。 以下是Reflect对象的一些常用方法&#xff1a; 1、Reflect.apply(target, thisArgument,…...

Ajax + Promise复习简单小结simple

axios使用 先看看老朋友 axios axios是基于Ajaxpromise封装的 看一下他的简单使用 安装&#xff1a;npm install axios --save 引入&#xff1a;import axios from axios GitHub地址 基本使用 axios({url: http://hmajax.itheima.net/api/province}).then(function (result…...

WebDAV之π-Disk派盘 + 小书匠

小书匠是一款功能丰富,强大的知识管理工具。全平台覆盖,离线数据存储,自定义数据服务器,所见即所得的 markdown 编辑体验。 小书匠提供了多种实用的编辑模式,例如:栏编辑、双栏编辑、三栏编辑、全屏写作、全屏阅读等。并且该软件还提供了许多有用的扩展语法,比如Latex公…...

LTE ATTACH流程、PDN流程、PGW地址分配介绍

1、S-GW\P-GW选择 MME根据S-GW和P-GW的拓扑信息进行S-GW/P-GW的选择&#xff0c;在S-GW的候选序列和P-GW的候选序列中比较&#xff0c;寻找是否有合一的S-GW/P-GW&#xff0c;并且根据S-GW的优先级和权重信息进行排序&#xff0c;得到S-GW/P-GW的候选组。 2、SGW>PGW连接 PD…...

SQL sever中用户管理

目录 一、用户管理常见方法 二、用户管理方法示例 2.1. 创建登录账户&#xff1a; 2.1.1 检查是否创建账户成功&#xff1a; 2.2. 创建数据库用户&#xff1a; 2.2.1检查用户是否创建成功&#xff1a; 2.3. 授予权限&#xff1a; 2.3.1授予 SELECT、INSERT 和 U…...

linux————pxe网络批量装机

目录 一、概述 什么是pxe pxe组件 二、搭建交互式pxe装机 一、配置基础环境 二、配置vsftpd 三、配置tftp 四、准备pxelinx.0文件、引导文件、内核文件 一、准备pxelinux.0 二、准备引导文件、内核文件 五、配置dhcp 一、安装dhcp 二、配置dhcp 六、创建default文…...

处理时延降低24倍,联通云粒数据引擎优化实践

*作者&#xff1a;郑扬勇&#xff0c;云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月&#xff0c;是中国联通集团混改以来成立的首家合资公司&#xff0c;是中国智慧城市数智化建设者。一直以来&#xff0c;云粒智慧以数字化、智能化、集约化产品为核心&…...

学习MATLAB

今日&#xff0c;在大学慕课上找了一门关于MATLAB学习的网课&#xff0c;MATLAB对于我们这种自动化的学生应该是很重要的&#xff0c;之前也是在大三的寒假做自控的课程设计时候用到过&#xff0c;画一些奈奎斯特图&#xff0c;根轨迹图以及伯德图&#xff0c;但那之后也就没怎…...

React 18 对 state 进行保留和重置

参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置&#xff0c;React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …...

MySQL之事务与引擎

目录 一、事物 1、事务的概念 2、事务的ACID特点 3、事务之间的相互影响 4、Mysql及事务隔离级别(四种) 1、查询会话事务隔离级别 2、查询会话事务隔离级别 3、设置全局事务隔离级别 4、设置会话事务隔离级别 5、事务控制语句 6、演示 1、测试提交事务 2、测试事务回滚 4…...

Flink集群常见的监控指标

为确保能够全面、实时地监控Flink集群的运行状态和性能指标。以下是监控方案的主要组成部分&#xff1a; Flink集群概览&#xff1a;通过访问Flink的JobManager页面&#xff0c;您可以获取集群的总体信息&#xff0c;包括TaskManager的数量、任务槽位数量、运行中的作业以及已…...

React常见知识点

1. setCount(10)与setCount(preCount > preCount 10) 的区别&#xff1a; import React, { useState } from react; export default function CounterHook() {const [count, setCount] useState(() > 10);console.log(CounterHook渲染);function handleBtnClick() {//…...

Vue-router路由

配置路由 相当于SpringMVC的Controller 路径然后&#xff0c;跳转到对应的组件 一键生成前端项目文档...

JVM-CMS

when 堆大小要求为4-8G 原理 初始标记&#xff1a;执行CMS线程->STW&#xff0c;标记GC Root直接关联的对象->低延迟 并发标记&#xff1a;执行CMS线程和业务线程&#xff0c;从GC Root直接关联的对象开始遍历整个对象图 重新标记&#xff1a;执行CMS线程->STW&a…...

无涯教程-Flutter - Dart简介

Dart是一种开源通用编程语言&#xff0c;它最初是由Google开发的&#xff0c; Dart是一种具有C样式语法的面向对象的语言&#xff0c;它支持诸如接口&#xff0c;类之类的编程概念&#xff0c;与其他编程语言不同&#xff0c;Dart不支持数组&#xff0c; Dart集合可用于复制数据…...

如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送

最近在写注册功能的自动发送邮箱告知验证码的功能&#xff0c;无奈根本没有学过前端&#xff0c;只有写Qt的qss基础&#xff0c;只好借助网页设计自己想要的邮箱格式&#xff0c;最终效果如下: 也推销一下自己的项目ShaderLab&#xff0c;可运行ShaderToy上的大部分着色器代码&…...

手机无人直播软件在苹果iOS系统中能使用吗?

在现代社交媒体的时代&#xff0c;直播带货已经成为了一种热门的销售途径。通过直播&#xff0c;人们可以远程分享自己的商品&#xff0c;与观众进行互动&#xff0c;增强沟通和参与感。而如今&#xff0c;手机无人直播软件更是成为了直播带货领域的一项火爆的技术。那么&#…...

创建2个线程并执行(STL/Windows/Linux)

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun1(void) {cout << "one STL thread 1!" << endl; }void thread_fun2(void) {cout << "one STL thread 2!" <…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析

LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法&#xff1a;数据与控制信息的结构或格式&#xff0c;如同语言中的语法规则语义&#xff1a;控制信息的具体含义和响应方式&#xff0c;规定通信双方"说什么"同步&#xff1a;事件执行的顺序与时序…...