当前位置: 首页 > 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!" <…...

CCF算法大赛C题详解:如何将整数m转换为n进制并输出特定多项式格式(附Python代码逐行分析)

CCF算法大赛C题详解&#xff1a;从进制转换到多项式格式化的完整指南 在编程竞赛中&#xff0c;处理数字的进制转换和特定格式输出是常见的基础题型。CCF算法大赛的这道题目巧妙地将这两个概念结合在一起&#xff0c;要求参赛者不仅实现进制转换&#xff0c;还要按照严格的规则…...

从课堂到职场:数字电路面试官最爱问的5个FPGA/HDL实战问题深度解析

从课堂到职场&#xff1a;数字电路面试官最爱问的5个FPGA/HDL实战问题深度解析 在数字电路设计的职业道路上&#xff0c;从校园知识到实际工程应用往往存在一道隐形的鸿沟。许多应届生在面试时能够流畅背诵教科书定义&#xff0c;却在面对具体设计问题时束手无策。本文精选了五…...

在 openSUSE Tumbleweed 上为 Canon LBP2900 配置网络打印:从驱动安装到 CUPS 调试

1. 准备工作&#xff1a;驱动下载与依赖安装 Canon LBP2900 虽然是一款经典机型&#xff0c;但官方对 Linux 的支持一直比较保守。我去年在给公司部署办公环境时就遇到过这个坑&#xff0c;当时花了两天时间才搞明白驱动安装的门道。首先需要从佳能官网下载专用驱动包&#xff…...

特定域名的proxy访问

不想破坏现有的proxy规则&#xff1b;某些域名需要proxy才可以上。 使用gost中的ss&#xff0c;简单搭建proxy&#xff1a;gost文档&#xff1a;https://v2.gost.run/ss/1. gost配置 服务端&#xff1a; gost -Lss://aes-128-gcm:password:8361客户端&#xff08;windows&#…...

【Ease UI】2026-04-03组件更新:新增组件xly-china-map中国地图组件

&#x1f680; 即插即用的 Vue 3 业务组件库&#xff0c;让中后台开发回归简单Ease UI 是一套为「快速复制」而生的 Vue 3 业务组件库。每个组件都是独立的 .vue 单文件&#xff0c;不依赖任何外部样式或工具函数&#xff0c;直接复制到你的项目即可使用。它仅依赖 Element Plu…...

解锁学术新境界:书匠策AI——你的期刊论文智能导航员

在学术探索的浩瀚海洋中&#xff0c;每一位研究者都渴望拥有一盏明灯&#xff0c;照亮前行的道路&#xff0c;让复杂的论文写作之旅变得轻松而高效。今天&#xff0c;就让我们一同揭开书匠策AI的神秘面纱&#xff0c;探索它如何成为你撰写期刊论文时的得力助手与智能导航员。&a…...

BilibiliDown:开源视频下载工具的批量处理与高效下载指南

BilibiliDown&#xff1a;开源视频下载工具的批量处理与高效下载指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirror…...

【最新最权威】ArcGIS ArcMap中添加在线地图-天地图(地形、矢量、影像、全球境界)的方法

1 图源介绍地理信息公共服务平台&#xff08;天地图&#xff09;是县级以上自然资源主管部门向社会提供各类在线地理信息公共服务、推动地理信息数据开放共享的政府网站&#xff0c;由国家级节点、省级&#xff08;兵团&#xff09;节点、市县级节点组成。在底图服务方面&#…...

2025届必备的五大降重复率平台实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作和论文创作的范畴之内&#xff0c;维普检测是颇为常见的查重办法。当遭遇人工智能…...

群晖NAS+Docker实战:手把手教你部署Llama 2打造私有化AI助手

1. 为什么要在群晖NAS上部署Llama 2&#xff1f; 最近两年&#xff0c;大语言模型&#xff08;LLM&#xff09;的火爆程度有目共睹。但大多数人都只能通过网页或API使用这些服务&#xff0c;不仅响应速度慢&#xff0c;还面临着隐私泄露的风险。而群晖NAS作为家庭和小型办公室的…...