фляга rest api: невозможно получить доступ к соединению с базой данных как глобальная переменная - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь создать Restful Web-сервис, используя Flask, flask_restful.Resource, где я должен получить доступ к таблицам apache phoenix для каждого запроса (GET / POST).Сначала я пытался создать соединение БД в app.py, заполнить глобальную переменную flask.g и использовать ее в своем классе ресурсов, надеясь, что мне не нужно каждый раз создавать соединение.

Однако яне могу получить доступ к переменным flask.g в моем классе ресурсов.

Вот мой код:

#!/usr/bin/python
import os
from flask_restful import Resource
from flask_restful import reqparse
from flask import jsonify, request
from flask import current_app, app
from flask import g

import traceback
import jsonschema as js


from phoenix_dam import PhoenixDam

class ModelExecStatsService(Resource):


    def __init__(self):

        self.db_conn = None
        if request.is_json:
            print ("request is a json")
            self.request_json = request.get_json()
        else:
            self.request_json = None
        self.result_dict = []


        super(ModelExecStatsService, self).__init__()

          def get(self):

        try:
            app_name = request.args.get('appName')
            model_name = request.args.get('modelName')
            model_version = request.args.get('modelVersion')
            print("args : ",app_name, model_name, model_version)
            sql_query = "select * from mydb.mytable"

            print (sql_query)
            print ("acquiring connection..")
            print(" Now, submit the query to the database")
            result_set = PhoenixDam.read_data(g.db_conn,sql_query)
            for row in result_set:
                row_dict = dict(zip(self.columns_list,row))
                self.result_dict.append(row_dict)

            return self.result_dict

        except Exception:
            traceback.print_exc()
            return { 'message' : 'Error in Retrieving Model Stats' }
        finally:
            self.db_conn.close()
...