写在前面
最近在使用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()