Flask-pymongo RuntimeError: Работа вне контекста приложения - PullRequest
1 голос
/ 11 июля 2019

Я пишу программу для чтения документа mongodb на основе поля id с использованием flask-pymongo. Но я получаю ошибку, кто-нибудь может сказать мне, где я иду не так?

код:

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, я получаю результат, но пытаюсь написать общее.

1 Ответ

0 голосов
/ 11 июля 2019

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

...