通过单独的类连接mongodb服务器

时间:2019-05-22 08:33:15

标签: python mongodb flask

我正在使用flask创建简单的api。 api只是从mongoDB返回值。如果我在同一功能内进行连接,则一切正常。我不只是在文件开始时进行连接,因为我在ubuntu上使用uwsgi和nginx服务器。如果我那样做,那么就会有叉子的问题。

但是,我必须将此连接与其他api一起使用,因此被认为可以创建一个单独的类进行连接,每个api都将简单地调用它。我正在使用此功能使代码易于管理。但是,当我尝试这些代码时,它总是显示内部服务器错误。我也尝试使此函数静态化,但仍然存在错误。

注意-我在这里使用mongodbatlas帐户时,我已经将 mongodb地址替换为xxx

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"}

1 个答案:

答案 0 :(得分: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: