用Flask实现简单的MongoDB接口

本文介绍如何利用Python的Flask框架创建与MongoDB交互的简单接口。通过实例代码展示了如何设置URL路由,连接数据库并进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python代码如下:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
#@TIME  :2019/11/18 18:52
from flask import Flask
import MongoDB as mgdb
import traceback
import json

def test():
    return "{'result': 'ok'}"

def search_common(db, collection, raw_query):
    mongo = mgdb.Mongo(db)
    res= mongo.search_common(collection, raw_query)
    result = json.dumps({'result': res}, ensure_ascii=False, sort_keys=True)
    result = result.encode('utf-8')
    return result

def store_docs(db, collection):
	mongo = mgdb.Mongo(db)
	data = request.get_data()
    if type(data) == bytes:
        data = data.decode('utf8')
    if data == '':
        return "{'result': 'data null'}"
    try:
        data = json.loads(data)
    except:
        traceback.print_exc()
        return "{'result': 'data format error : not json'}"
    if type(data) != dict:
        return "{'result': 'data format error : not dict'}"
    data = mongo.store_docs(collection)
    result = json.dumps({'result': data}, ensure_ascii=False, sort_keys=True)
    result = result.encode('utf-8')
    return result
    
Methods = {
    'test': test,
    'common_search': common_search,
    'store_docs': store_docs,
}

app = Flask(__name__)

@app.route('/<method>/<db>/<collection>', methods = ['GET', 'POST'])
def method_1(method, db, collection):
    if method not in Methods:
        return 'Method error!'
    return Methods[method](db, collection)

@app.route('/<method>/<db>/<collection>/<raw_query>', methods = ['GET','POST'])
def method_2(method):
    if method not in Methods:
        return 'Method error!'
    if type(raw_query) == bytes:
        raw_query = raw_query.decode('utf-8')
    try:
        raw_query = json.loads(raw_query)
    except:
        traceback.print_exc()
        return "{'result': 'query format error'}"
    if type(raw_query) != dict:
        return "{'result': 'query format error'}"
    return Methods[method](db, collection, raw_query)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=4321, debug=True)
#!/usr/bin/env python 
# -*- coding:utf-8 -*-
#@TIME  :2019/11/18 18:52
from bson import ObjectId
import pymongo
import traceback

def obj2str(doc):
    if '_id' in doc:
        doc['_id'] = str(doc['_id'])
    return doc
    
class Mongo(object):
    def __init__(self, db_name):
        self.db_name = db_name
        self.client = pymongo.MongoClient('mongodb://' + InterfaceConfig.MongoDB_URL, 27017)
        self.db = self.client[self.db_name]

    def common_search(self, collection, raw_query):
        try:
            if 'query' in raw_query:
                query = raw_query['query']
            if 'fields' in raw_query and raw_query['fields'] != []:
                fields = {}
                for key in raw_query['fields']:
                    fields[key] = 1
                if '_id' not in raw_query['fields']:
                    fields['_id'] = 0
                data = [obj2str(doc) for doc in self.db[collection].find(query, fields)]
            else:
                data = [obj2str(doc) for doc in self.db[collection].find(query)]
            return data
        except:
            traceback.print_exc()
            return None
	
	def store_docs(self, collection, data):
        try:
            for doc in data:
                if doc['cmd'] == 'create':
                    doc.pop('cmd')
                    if '_id' in doc:
                        doc.pop('_id')
                    corpus_id = self.db[collection].insert(doc)
                elif doc['cmd'] == 'delete':
                    doc.pop('cmd')
                    self.db[collection].delete_one({'_id': ObjectId(doc['_id'])})
                elif doc['cmd'] == 'update':
                    doc.pop('cmd')
                    self.db[collection].update_one({'_id': ObjectId(doc['_id'])}, {'$set': doc})
                else:
                    return "cmd error"
            return 'ok'
        except:
            traceback.print_exc()
            return 'error'

if __name__ == '__main__':
	print('hello world!') 

url

http://127.0.0.1:4321/common_search/db_name/collection_name/{"query":{},"fields":["_id"]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值