我正在编写一个程序,使用flask-pymongo基于id字段读取mongodb文档。但是我出错了,有人可以告诉我我要去哪里错吗?
代码:
from flask import Flask, make_response, jsonify
from flask_pymongo import PyMongo
from collections import OrderedDict
from bson import json_util
import json
app = Flask('__name__')
app.config['MONGO_DBNAME'] = 'db_name'
app.config['MONGO_URI'] = 'mongodb://192.168.55.24:27017/db_name'
mongo_connection = PyMongo(app)
@app.route('/')
def index(inp_id):
collection = mongo_connection.db.table_name
one_record = collection.find_one({'id': inp_id})
obj_str = json_util.dumps(one_record)
obj_dict = json.loads(obj_str, object_hook=OrderedDict)
return make_response(jsonify(obj_dict), 200)
if __name__ == '__main__':
index('5cd00a468b36db516b6d2f16') # I think this is where I'm going wrong
给我以下错误:
RuntimeError: Working outside of application context.
如果我直接将id值替换为inp_id,则会得到结果,但我正在尝试编写一个通用值。
答案 0 :(得分:0)
Flask具有应用程序上下文,您可能需要使用app.app_context()
使其起作用。
应用程序上下文跟踪应用程序级数据 在请求,CLI命令或其他活动期间。而不是通过 每个功能, current_app 和 g 代理的应用程序 而是访问。
尝试一下:
def index(inp_id):
with app.app_context():
collection = mongo_connection.db.table_name
one_record = collection.find_one({'id': inp_id})
obj_str = json_util.dumps(one_record)
obj_dict = json.loads(obj_str, object_hook=OrderedDict)
return make_response(jsonify(obj_dict), 200)
有关更多信息,请阅读Flask Application context