數據庫更新後無法及時查詢到更新值

一、問題描述

         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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章