Flask+MongoDB REST API报404错误,无法获取指定字段数据求助
解决Flask-MongoDB REST API的404错误与多字段数据获取问题
首先咱们先搞定404错误的根源——你的代码里有个明显的语法错误,直接导致Flask应用没法正常启动,客户端自然拿不到正确响应:
看你的导入语句:
from flask import Flask, jsonify, json, request from flask_pymongo import PyMongo
这行代码把两个导入写在同一行了,Python根本解析不了,应该拆成两行:
from flask import Flask, jsonify, json, request from flask_pymongo import PyMongo
先把这个错误修复,启动应用时如果没有报错,404问题大概率就解决了。
接下来解决你要的多字段数据获取问题。你想要返回的格式是{ Results: [ {time1: "...", temp1: "..."}, {time2: "...", temp2: "..."}, ... ] },但当前代码只能拿到temp1相关数据,注释的代码还会引发问题,咱们根据两种常见的数据存储情况调整:
情况1:集合中每个文档包含完整的time1/temp1、time2/temp2、time3/temp3字段
如果你的thermo集合里的每个文档都同时有这三组字段,那可以直接遍历文档,提取所有需要的字段:
@app.route('/', methods=['GET']) def get_all_logins(): thermo = mongo.db.thermo output = [] # 遍历集合里的每一条文档 for doc in thermo.find(): item = {} # 逐个检查并提取字段,避免不存在字段引发KeyError if 'time1' in doc and 'temp1' in doc: item['time1'] = doc['time1'] item['temp1'] = doc['temp1'] if 'time2' in doc and 'temp2' in doc: item['time2'] = doc['time2'] item['temp2'] = doc['temp2'] if 'time3' in doc and 'temp3' in doc: item['time3'] = doc['time3'] item['temp3'] = doc['temp3'] # 只把有数据的项加入结果 if item: output.append(item) # 按照你要的格式返回,注意Results首字母大写 return jsonify({'Results': output})
情况2:集合中每个文档只存一组timeX/tempX数据
如果集合里一个文档只存time1+temp1,另一个存time2+temp2,那我们可以把所有字段合并到一个字典里:
@app.route('/', methods=['GET']) def get_all_logins(): thermo = mongo.db.thermo combined_results = {} # 遍历所有文档,收集所有time和temp字段 for doc in thermo.find(): for key, value in doc.items(): if key.startswith('time') or key.startswith('temp'): combined_results[key] = value # 包装成你需要的格式 return jsonify({'Results': [combined_results]})
额外注意事项
- 检查你的MongoDB连接URI:
mongodb://pkitsos:GoLobo$@localhost:27017/admin是连接admin数据库,确认你的thermo集合确实在这个库中,不然要把URI里的admin改成你的目标数据库名 - 确保MongoDB服务正在本地运行,账号密码正确
- 启动应用后,可以用
curl http://localhost:5000/测试返回结果,方便调试
内容的提问来源于stack exchange,提问作者pkitsos
相关产品推荐
相关产品推荐

