sqlalchemy expunge的简单使用

在 SQLAlchemy 中,expunge 是一个方法,用于从当前 Session 的状态中移除一个对象,使其不再与 Session 关联。这意味着,尽管对象本身可能仍然存在,但它将不再被 Session 跟踪其状态变化。

当你调用 expunge 方法时,你传递一个已经添加到 Session 中的对象作为参数。之后,这个对象将不再被视为 Session 的一部分,任何对其状态的更改都不会被 Session 捕获,并且在后续的 flushcommit 操作中也不会被同步到数据库。

以下是 expunge 方法的一个简单示例:

python 复制代码
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

# 假设数据库已经配置好,并且表已经创建
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()

# 创建一个新的 User 对象并添加到 session
new_user = User(name='Alice')
session.add(new_user)
session.flush()  # 将对象同步到数据库,但此时事务还未提交

# 现在,从 session 中移除这个对象
session.expunge(new_user)

# new_user 对象现在不再与 session 关联
# 对 new_user 的任何更改都不会被 session 跟踪,也不会被同步到数据库

# 提交事务(由于已经 expunge,new_user 的状态变化不会被提交)
session.commit()

在这个例子中,我们首先创建了一个新的 User 对象并将其添加到 Session 中。然后,我们调用 flush 方法将对象的状态同步到数据库(但此时事务还未提交)。接着,我们调用 expunge 方法从 Session 中移除这个对象。最后,我们提交事务,但由于 new_user 已经被 expunge 了,所以对其的任何更改都不会被提交到数据库。

请注意,expunge 并不会从数据库中删除对象,它只是从 Session 的状态中移除对象。如果你想要从数据库中删除对象,你应该使用 delete 方法。

相关推荐
倔强的石头_几秒前
灵活性与高性能兼得:KingbaseES 对 JSON 数据的全面支持解析
数据库
#微爱帮#1 分钟前
微爱帮监狱寄信写信小程序数据库优化技术文档
数据库
SadSunset3 分钟前
(15)动态SQL中的if,foreach和一些其他的常用标签
数据库·python·sql
问道飞鱼5 分钟前
【数据库知识】MySQL 数据库备份与还原详细解读
数据库·mysql·备份·还原
马克学长9 分钟前
SSM实验室设备管理系统8gr9f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·实验室设备管理·设备预约
+VX:Fegn089516 分钟前
计算机毕业设计|基于springboot + vue在线考试管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
DreamNotOver22 分钟前
使用 Django 测试脚本验证用户角色与权限:自动化测试用户仪表盘访
数据库·mysql·django·sqlite
萝卜青今天也要开心27 分钟前
2025年下半年系统架构设计师考后分享
java·数据库·redis·笔记·学习·系统架构
子夜江寒28 分钟前
MySQL 安装与配置指南(CentOS 7)
数据库·mysql·centos
DemonAvenger44 分钟前
Redis集群架构详解:从单机到分布式的扩展之路
数据库·redis·性能优化