python - SQLAlchemy 返回会话值而不是数据库值
问题描述
我正在实现一个电报机器人,其中一些数据使用 SQLAlchemy 记录在数据库中。有时,我有兴趣从我使用的主类的一个字段中获取一个值,阻止该行执行一些事情:
self.clock = enumType.CLOCK_END
check : ClockStatus = self.database.session.query(Bot).filter(Bot.id == self.id).with_for_update(nowait=False).first().clock
if (check is ClockStatus.CLOCK_END) : break
在此刻:
数据库值:ID_BOT = 312 CLOCK = CLOCK_RUNNING
内存值(对象本身): ID_BOT = 312 CLOCK(变量“时钟”)= CLOCK_END(刚刚分配)
(代码中的SELF是一个对象,Bot本身,是从活动会话中加载的,与代码中的“self.database.session”相同。CLOCK是一个枚举值,对象Bot的一个标签)。
关键是在这个会话中,“时钟”字段的值与数据库中的不同,但是 SQLAlchemy 在应用该过滤器时,返回会话对象的值(具有相同的 ID),而不是数据库中的值(尚未更新,但我想要更新前的旧值)。
我不想读取我已经拥有的值(尽管理论上它与数据库中的值相同,因为它们是相同的类型(Bot),具有相同的 ID)。在这里,SQLAlchemy“太聪明了”,我感兴趣的是读取驻留在数据库中的先前值。我稍后会同步它。有任何想法吗?非常感谢。
编辑:会话现在创建如下:
session = Session(autoflush=False)
结果相同。
解决方案
推荐阅读
- c++ - 基于索引相等性跳过向量迭代
- spring - 来自多个 s3 存储桶的 Spring 集成 AWS s3-inbound-streaming-channel-adapter 流
- python - 如何执行库存程序
- c# - 未找到 Azure 应用服务 ASP.NET Web API OWIN OAuth 路径
- xampp - MySQL在使用xampp时不断崩溃
- android - 是否有通知 RenderScript 函数或内核完成的回调方法?
- html - 如何设置多个元素的样式以将它们固定为 100% 宽度?
- java - 如何使用 java SDK 更新 GCP 实例对象?
- python - Django 可写嵌套序列化程序更新
- mqtt - 如何在 Mosquitto MQTT 中使用客户端 ID?