Python演示如何使用响应从mongo查询的生成器提供服务

Python演示如何使用响应从mongo查询的生成器提供服务,python,flask,Python,Flask,假设我的函数“search()”获取mongodb中的一些内容并返回生成器 我的flask视图函数如下所示 @app.route("search/") def search_page(): generator = search() return Response(generator) 但如果我这样做,我会得到这个错误: Error on request: Traceback (most recent call last): File "/usr/local/lib/python

假设我的函数“search()”获取mongodb中的一些内容并返回生成器

我的flask视图函数如下所示

@app.route("search/")
def search_page():
   generator = search()
   return Response(generator)
但如果我这样做,我会得到这个错误:

Error on request:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 180, in run_wsgi
    execute(self.server.app)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 171, in execute
    write(data)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 151, in write
    assert type(data) is bytes, 'applications must write bytes'
AssertionError: applications must write bytes

生成器本身将生成几个json值。我总是可以使用生成器构造列表并返回列表,但我希望避免这样做。

也有同样的问题–错误说明它必须写入字节,因此您需要写入字节作为响应。 因此,在
search()
函数中,您可以执行以下操作:

bytes = json.dumps(your_content_from_mongo).decode('utf-8')

这将把你的JSON从mongo解码成字节。

你的代码中有两个问题

  • 您应该确保生成器每次都生成字符串类型值
  • 需要使用stream_with_context方法,该方法可以从flask导入
  • 以下是一个例子:


    我在mongo以外的其他库中试用过,但不起作用,你有其他建议吗?谢谢,我认为应该是
    解码
    来将unicode转换成字节。