Python sqlalchemy报InvalidRequestError如何解决,,新手学习时,遇到一个问题
Python sqlalchemy报InvalidRequestError如何解决,,新手学习时,遇到一个问题
新手学习时,遇到一个问题,GG查了下,看得不是很明白,因此这里请教一下。
要实现的:用户列表有一个「禁言」操作,点击后更新该用户的禁言字段的布尔值。
「禁言」操作是通过视图函数实现的:
@app.route('/member/status-false/<int:user_id>')@login_requireddef status_false(user_id): from models import Member user = Member.query.filter_by(id=user_id).first() user.status = '0' #禁用用户 db.session.add(user) db.session.commit() return redirect(url_for('member'))
运行后,点击「禁言」Flask报错:
sqlalchemy.exc.InvalidRequestError: Object '' is already attached to session '1' (this is '2')
报错的问题大致理解是会话绑定对象乱掉了,但是不知道怎么修改上面的代码使得目的可以实现。
1.去掉 db.session.add(user) 试一下
2.将 import 引入 放在文件头部
结论:
两个不同的db交叉混用导致问题,根据报错也可看出,要操作的对象已经隶属于会话1, 而现在这个请求已经是会话2了。
原因:
之前我在自己负责的模块中设置了一个个人使用的db,用于自己模块的运行和测试; 后来leader在服务器代码的根下面建立了一个新的db,然后修改了我部分代码,使它们使用新的db; 然后我自己调试自己代码时,就报了上述错误; 原因是我有部分代码还是使用原先的db,与新的db会话发生冲突;
我昨天晚上继续查了一些资料,解决方案如下:
一旦视图函数内涉及db.session的操纵,在函数内进行 from models import db
即正常。
编橙之家文章,
相关内容
- Sublime Text空格宽度不同是什么问题,sublimetext,问题是这
- 关于RESTful多个资源关联时返回数据实现方法是什么,
- Python字节init方法示例问题,python字节init示例,之前了解
- Python redis blpop方法不能获取队列里中数据是何原因,
- Python方法怎样获取百度地图中目标信息,python获取,目前
- Python下载七牛图片解析正常却无法下载,请牛帮看下源
- Python函数直接返回与传递引用的应该如何区别怎么取舍
- Python函数内部定义之前调用报错求助,python函数,def s
- 学习机安装Python3.4.3失败提示找不到sys模块怎么办,p
- Python中浮点数int()使用技巧问题,pythonint,int()描述如下
评论关闭