【SQLAlchemy】is not bound to a Session; attribute refresh operation cannot proceed
生活随笔
收集整理的這篇文章主要介紹了
【SQLAlchemy】is not bound to a Session; attribute refresh operation cannot proceed
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:https://segmentfault.com/q/1010000004530775
SQLAlchemy的ORM方式將數據庫中的記錄映射成了我們定義好的模型類,但是帶來一個問題是,這些類對象的實例只在數據庫會話(session)的生命期內有效,假如我將數據庫會話關閉了,再訪問數據表類的對象就會報錯。
可能有的人會說,那你不要關閉數據庫會話呀,會話關閉了對象當然就無法訪問了,因為ORM需要跟蹤這個對象,并緩存一些你對它的操作以便在需要時更新到數據庫去的,它不是一個簡單的對象。
但我現在的需求是:從數據庫中查詢得到了一個對象實例之后,就想讓這個對象與數據庫切斷聯系,SQLAlchemy有提供這樣的方法嗎?我必須定義一個具有同樣成員的類然后再初始化它?
解決方式1
解決方式2
錯誤寫法:
def query_increase_decrease_url_all():session = Session()try:increase_decrease_url_all = session.query(Increase_decrease_url).all()curlogger.info('increase_decrease_url_all = '+str(increase_decrease_url_all))return increase_decrease_url_allexcept Exception as e:curlogger.error(e)traceback.print_exc()finally:session.commit() // 這里不需要commitsession.close()正確:(不進行操作,就不commit,不需要在后續操作中保持session連接)
def query_increase_decrease_url_all():session = Session()try:increase_decrease_url_all = session.query(Increase_decrease_url).all()curlogger.info('increase_decrease_url_all = '+str(increase_decrease_url_all))return increase_decrease_url_allexcept Exception as e:curlogger.error(e)traceback.print_exc()finally:session.close()總結
以上是生活随笔為你收集整理的【SQLAlchemy】is not bound to a Session; attribute refresh operation cannot proceed的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaScript】判断一个字符串是
- 下一篇: 【Spring】SpringMVC 作用