gpt4 book ai didi

python - 修改flask中的MongoDB数据

转载 作者:行者123 更新时间:2023-12-01 04:51:28 24 4
gpt4 key购买 nike

我正在运行一个 Flask 服务器,它从 mongo DB 获取数据。

from flask import Flask
from flask import render_template
from pymongo import Connection
import json
from bson import json_util
from bson.json_util import dumps

app = Flask(__name__)

MONGODB_HOST = 'localhost'
MONGODB_PORT = 27017
DBS_NAME = 'donorschoose'
COLLECTION_NAME = 'projects'
FIELDS = {'school_state': True, 'resource_type': True, 'poverty_level': True, 'date_posted': True, 'total_donations': True, '_id': False}

@app.route("/")
def index():
return render_template("index.html")

@app.route("/donorschoose/projects")
def donorschoose_projects():
connection = Connection(MONGODB_HOST, MONGODB_PORT)
collection = connection[DBS_NAME][COLLECTION_NAME]
projects = collection.find(fields=FIELDS)
json_projects = []
for project in projects:
json_projects.append(project)
json_projects = json.dumps(json_projects, default=json_util.default)
connection.disconnect()
return json_projects

if __name__ == "__main__":
app.run(host='0.0.0.0',port=5000,debug=True)

我从网上得到了这段代码并成功实现了。并通过此应用程序向 d3 应用程序提供数据。我的问题是:是否可以使用python在flask环境中修改数据? (在我上面粘贴的代码中?)。我之所以这么问,是因为 python 比 d3 具有更大的灵 active ,因为我在 d3 方面的专业知识较少。问题:“贫困水平”栏有 4 个固定值,即低、中、高、未知。我的目标是计算高贫困线的百分比 即对于“poverty_level”列 -> count(val =high)/count(all rows)

本质上,我只需要一列来显示我的指标,但我在 d3 上遇到了困难。任何 d3 或 python 级别的帮助将不胜感激:)

谢谢。

最佳答案

首先,您需要完全迭代 find() 返回的 Cursor:

projects = list(collection.find(fields=FIELDS))

然后计算总数和高贫困项目数量:

high_poverty_count = len(p for p in projects if p['poverty_level'] == 'high')
high_poverty_ratio = float(high_poverty_count) / len(projects)

然后我会将其与所有项目的列表一起添加为一个文档:

result = {'high_poverty_ratio': high_poverty_ratio,
'projects': projects}

return json.dumps(result, default=json_util.default)

另外,请注意您的应用程序有两个严重的问题:

首先,您使用“连接”,即 obsolete 。这样做:

from pymongo import MongoClient

client = MongoClient(MONGODB_HOST, MONGODB_PORT)

其次,您创建一个新客户端并针对每个请求断开它的连接。这非常慢。相反,应在应用程序启动时创建客户端,并且切勿断开连接:

client = MongoClient(MONGODB_HOST, MONGODB_PORT)

@app.route("/donorschoose/projects")
def donorschoose_projects():
collection = client[DBS_NAME][COLLECTION_NAME]
# ... etc ....
return json.dumps(result, default=json_util.default)

关于python - 修改flask中的MongoDB数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28365037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com