我正在尝试使用帖子ID从数据库中删除帖子,但我不断收到以下错误。
sqlalchemy.exc.InvalidRequestError:对象”已附加到会话“ 34”(此为“ 35”)。
我想做的事情应该非常简单,但是我没有足够使用SQLAlchemy来确定这意味着什么以及如何解决它。
我有一条删除帖子的方法,如下所示:
@app.route('/delete_post')
def delete_post():
post_id = request.args.get('post_id')
deleted_post = posts.query.filter_by(id=post_id).first()
db.session.delete(deleted_post)
db.session.commit()
flash('Post deleted!', 'success')
return redirect(url_for('admin_posts'))
所有路线应该做的是从上一页传递的URL中获取post_id变量,查询数据库以查找ID为post_id的所有帖子,然后删除匹配的帖子。我只是不断收到上面发布的错误。
我不认为问题出在代码上,应该按照我的理解来解决。我认为问题出在SQLAlchemy db.sessions上,我以某种方式滥用了它。
我还应该注意,在该应用程序的其余部分中,我已经多次使用SQLAlchemy来创建帖子,回复和帐户,并且它们都有效。问题就在于此。
答案 0 :(得分:0)
我相信您无意中创建了2个会话,并将相同的对象粘贴到两个会话中。
此行
posts.query.filter_by(id=post_id).first()
最有可能使用一个会话(很难说没有此模型代码)。
然后
db.session.delete(deleted_post)
可能正在使用其他会话。
解决方案是对两个操作使用相同的会话。
尝试从posts
模型所使用的模块中导入会话。
答案 1 :(得分:0)
所以我让它工作了,问题出在我的进口商品上...
我不确定为什么会这样,或更重要的是,但是,我没有正确地从route.py中的init.py导入。
我有:
from app import app
但需要:
from app import app, db
明显的和愚蠢的错误,但是我认为一切正常,因为我的所有其他SQLAlchemy功能都可以正常工作,例如插入和查询...非常奇怪。