Flask Sqlalchemy 总是提示:is not bound to a Session; attri

怎么办
  • 125

我在视图函数中调用了模型中的一个静态方法:

@staticmethod
def getDots(pid='0', result=[]):
    current = Dot.query.filter_by(pid = pid).all()
    for v in current:
        result.append(v)
        Dot.getDots(v.id, result)
    return list(result)

视图函数:


@dot.route('/list', methods=['post', 'get'])
@login_required
def list():
    dots = Dot.getDots()
    return render_template('dot/list.html', dots=dots)
    

第一次进入的时候数据都是正确的,如果再刷新一次就出现报错:

clipboard.png

不知道为什么,第一次总是可以的,就是不能刷新

回复
阅读 2.3k
2 个回答

我的理解是,你在你的 Dot 类中定义了一个即是静态函数又是递归函数的 getDots()。这里涉及到你的递归问题。

出现以上错误的原因是因为:session 已经被提交,导致操作的 model 对象已经不在当前 session 中了。

使用下面的方法解决一下试试。

@staticmethod
def getDots(pid='0', result=[]):
    current = Dot.query.filter_by(pid = pid).all()
    for v in current:
        result.append(v)
        v = session.merge(v) # 新加内容
        Dot.getDots(v.id, result)
    return list(result)

或者你改变一下你的递归方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏