数据库更新后无法及时查询到更新值

一、问题描述

         Flask+SQLAlchemy的注册登录小程序,注册成功后通过Navicat可看到MySQL中新值已经添加成功,但登录时却显示账号不存在,即查询不到刚刚插入的值。

查询操作代码

#创建DEBession类型
DBSession = sessionmaker(bind=engine)
db_session = DBSession()

#查询表中用户是否存在
def get_info(name):
    user = db_session.query(User).filter(User.name == name).all()
    return user[0] if user else False

 

 

二、问题分析

         经过查询资料发现,SQLAlchemy为了加快查速度,因而存在"缓存"机制。在其执行查询操作时,若存在有缓存(上一次数据库该表的值),则其会优先查询缓存中的值并返回结果,而缓存是上一次操作时所保留的,当然还没有写入刚插入的新值。

         所以这也就出现了数据库的值已经更新,但却查询不到更新值的情况。

三、解决途径

       在查询操作前先执行db_session.commit()

       这样会将当前session对象里面的缓存全部提交,即清空缓存。在下一次进行查询时,就不会查询缓存,而会从数据库中查询最新的数据。

#查询表中用户是否存在
def get_info(name):
    #清空缓存
    db_session.commit()
    user = db_session.query(User).filter(User.name == name).all()
    return user[0] if user else False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值