简体   繁体   中英

Flask-pymongo RuntimeError: Working outside of application context

I'm writing a program to read mongodb document based on id field using flask-pymongo. But I'm getting error, can anybody tell me where am I going wrong?

code:

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

giving me the below error:

RuntimeError: Working outside of application context.

If I pass id value directly in the place of inp_id I get the result but I'm trying to write a generic one.

Flask has an application context, You might need to use app.app_context() to make it work.

The application context keeps track of the application-level data during a request, CLI command, or other activity. Rather than passing the application around to each function, the current_app and g proxies are accessed instead.

Try this :

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)

For more information, read Flask Application context

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM