为了账号安全,请及时绑定邮箱和手机立即绑定

流式传输 Flask 响应时保持 SQLAlchemy 会话处于活动状态

流式传输 Flask 响应时保持 SQLAlchemy 会话处于活动状态

30秒到达战场 2021-07-15 14:11:59
我正在尝试从使用 Flask-SQLAlchemy 的 Flask 服务器将大型 CSV 流式传输到客户端。在配置应用程序时(使用工厂模式),db.session.close()在每个请求之后调用:@app.after_requestdef close_connection(r):    db.session.close()    return r到目前为止,此配置一直运行良好,因为所有请求都是短暂的。但是当流式响应时,SQLAlchemy 会话过早关闭,在调用生成器时抛出以下错误:sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <Question> is not bound to a Session; lazy load operation of attribute 'offered_answers' cannot proceed伪代码:@app.route('/export')def export_data():    answers = Answer.query.all()    questions = Question.query.all()    def generate():        Iterate through answers questions and write out various relationships to csv    response = Response(stream_with_context(generate()), mimetype='text/csv')    return response我已经尝试了使用/不使用stream_with_context和全局标志的多种配置def close_connection来不自动关闭连接,但同样的错误仍然存在。
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

@app.after_request 在生成器流文件被调用之前关闭数据库会话。

解决方案是迁移db.session.close()@app.teardown_requeststream_with_context实例化时也必须使用Response


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 388 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信