Подключение сервера mongodb через отдельный класс

Я использую флягу для создания простого API. API просто возвращает значения из mongoDB. Все отлично работает, если я делаю соединение внутри одной и той же функции. Я не подключаюсь просто при запуске файла, потому что использую сервер uwsgi и nginx на Ubuntu. Если я это сделаю, то возникнет проблема форка.

Однако я должен использовать это соединение с другим API, поэтому решил создать отдельный класс для подключения, и каждый API будет просто вызывать его. Я использую эту функцию, чтобы сделать коды управляемыми. Однако, когда я пробую эти коды, это всегда показывает внутреннюю ошибку сервера. Я тоже пытался сделать эту функцию статической, но ошибка все еще существует.

Примечание. Я заменил адрес mongodb с xxx, так как здесь я использую учетную запись mongodbatlas.

from flask import Flask
from flask import request, jsonify
from flask_pymongo import pymongo
from pymongo import MongoClient
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)
#client = MongoClient("xxx") 
#db = client.get_database('restdb')
#records = db.stars


class dbConnect():
    def connect(self):
        client = MongoClient("xxx") 
        db = client.get_database('restdb')
        records = db.stars
        return records


class Order(Resource):

    def get(self):
        #client = MongoClient("xxx") 
        #db = client.get_database('restdb')
        #records = db.stars
        #star = records
        star = dbConnect.connect
        output = []
        for s in star.find():
            output.append({'name' : s['name'], 'distance' : s['distance']})
        return jsonify({'result' : output})


api.add_resource(Order, '/')


if __name__ == "__main__":
    app.run(host='0.0.0.0')

ОШИБКА {"message": "Internal Server Error"}

Можете ли вы опубликовать, какую ошибку вы получаете на сервере при запуске вашего API?

MSS 22.05.2019 10:41

@Tony Я отредактировал исходный пост с ОШИБКОЙ внизу.

Mandeep Chaudhary 22.05.2019 10:46
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
2
2
165
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предварительное расследование предполагает, что вы не создали экземпляр своего класса dbConnect. Кроме того, вы неправильно назвали метод connect.

class Order(Resource):

    def get(self):
        db = dbConnect() # This was missing
        star = db.connect() # This is how you make method call properly.
        output = []
        for s in star.find():
            output.append({'name' : s['name'], 'distance' : s['distance']})
        return jsonify({'result' : output})

Также class dbConnect() следует объявлять как class dbConnect:.

Спасибо за обнаружение синтаксических ошибок

Mandeep Chaudhary 22.05.2019 11:01

Другие вопросы по теме