当前位置: 首页 > 知识库问答 >
问题:

使用Python和Flask创建MongoDB支持的RESTFul API

鲁才艺
2023-03-14

我目前正在研究一个MongoDB支持的RESTFUL API与烧瓶...但是,Ive使用find_one()设置了一个区域搜索查询,但是一旦我尝试使用find()将其设置为具有多个结果的较大查询,我就在postman上收到以下错误:

UnboundLocalError: local variable 'output' referenced before assignment

这是有效的代码,但它只从查询中返回一个文档:

@app.route('/active_jobs/<zone>', methods = ['GET'])
def get_one_zone(zone):

ajobs = mongo.db.ajobs

q = ajobs.find_One({'zone' : zone})

output = {}

output = ({
'zone': q['zone'], 'jobdate' : q['jobdate'],
'jobtime' : q['jobtime'],'client': q['client'],
})

return jsonify({output})

一旦我尝试更改以获得所有结果,使其查找()它不起作用

@app.route('/active_jobs/<zone>', methods = ['GET'])
def get_one_zone(zone):

ajobs = mongo.db.ajobs

q = ajobs.find({'zone' : zone})

output = {}

output = ({
'zone': q['zone'], 'jobdate' : q['jobdate'],
'jobtime' : q['jobtime'],'client': q['client'],
})

return jsonify({output})

ps.我是编程界的新手,所以如果你能使用简单的例子,我会非常感激。

共有2个答案

冀越
2023-03-14

出于安全原因,建议返回带有列表的字典,而不是返回普通列表,如下所示:

{ 
  'data': [1,2,3,4]
}

jsonify将很好地处理这个问题。

顺便说一句,我已经为构建restful apis构建了一个轻量级框架,并且使用的默认数据库引擎是mongoDB,所以我想您可能会发现它很有帮助。代码如下:https://github.com/sebastiandev/peach

有一些循序渐进的例子。如果你有任何其他疑问,请告诉我,我会尽力帮助你。

高鸿振
2023-03-14

这可能是因为mongo中的“find_One”将仅返回一个文档作为字典,而find将返回多个文档作为一个字典列表。jsonify在列表上不起作用,如下所示:如何在Flask中“jsonify”列表?。

您可以使用json.dumps来代替,正如那里的答案所暗示的那样。

 类似资料:
  • 我使用querydsl来构造动态搜索查询(并使用spring data mongodb API来执行它)。是否有一种方法可以构造支持$text(全文)搜索的querydsl查询?

  • Cloudera留档,显示了一种“使用Avro模式文件创建Avro支持的Hive表”的简单方法。这很好。我想对Parque支持的Hive表做同样的事情,但是在这种情况下,相关的留档列出了每种列类型,而不是从模式中读取。是否可以像Avro数据一样从模式中读取Parque列?

  • 本文向大家介绍Python中使用Flask、MongoDB搭建简易图片服务器,包括了Python中使用Flask、MongoDB搭建简易图片服务器的使用技巧和注意事项,需要的朋友参考一下 1、前期准备 通过 pip 或 easy_install 安装了 pymongo 之后, 就能通过 Python 调教 mongodb 了. 接着安装个 flask 用来当 web 服务器. 当然 mongo 也

  • 我还看到,我不必使用导入,只需使用整个路径调用类。这似乎是一个很多的工作,但可能的解决方案。我只想知道有没有更快更容易的解决办法。

  • 主要内容:Python类的实例化,Python类对象的使用通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象。 创建类对象的过程,又称为类的实例化。 Python类的实例化 对已定义好的类进行实例化,其语法格式如下: 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或者添加的 __init__() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。 例如,如下代码创建了名为 CLang

  • 我正在使用Spring数据卡桑德拉,与卡桑德拉数据库连接,配置文件扩展了抽象卡桑德拉配置和覆盖功能 - 我的目标是用@Table注释从com.example包中提到的实体在Cassandra中自动创建表。比如说- 对于这个实体,使用给定的配置,应该在spring初始化期间创建一个表,但是它没有这样做。不过也没有例外,它并没有在Cassandra中创建任何东西。任何帮助都将不胜感激。谢了。