寫在前面
最近在使用python的sqlalchemy結合flask框架寫網頁demo的時候,發現對於數據庫的增刪查操作可以正常進行,但是在進行數據庫記錄的修改操作的時候,卻出現了問題。
問題描述 & 報錯記錄
from application import db
#根據id查詢出一條記錄然後修改其view_counter值 進行加1設置
info_d = Movie.query.filter_by(id=id).first()
info_d.view_counter += 1
db.session.add(info_d)
db.session.commit()
#報錯
#sqlalchemy.exc.InvalidRequestError:
#Object '<Movie at 0x106112b50>' is already attached to session '1' (this is '2')
從報錯中我們可以看到<Movie at 0x106112b50>‘已經連接到會話’1’(這裏是’2’)
說明我們將sqlalchemy的一個model在另一個地方使用了
解決方法
當設計db.session操作的時候,函數內進行 from models import db,即要用哪個db就從哪個model中導入。不能直接導入最原始的db
from model.Movie import db
#根據id查詢出一條記錄然後修改其view_counter值 進行加1設置
info_d = Movie.query.filter_by(id=id).first()
info_d.view_counter += 1
db.session.add(info_d)
db.session.commit()