首页 > 解决方案 > 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)

结果相同。

标签: pythonpython-3.xdatabasesqlalchemyflask-sqlalchemy

解决方案


推荐阅读