flask通过Flask-PyMongo操作mongo数据库

MongoDB 是一个开源的数据库,它存储着灵活的类-JSON 的“文档”。与关系数据库中的数据行相反,它能够存储任何的数字,名称,或者复杂的层级结构。Python 开发者可以考虑把 MongoDB 作为一个持久化,可搜索的 Python 字典的“仓库”(实际上,这是如何用 PyMongo 来表示 MongoDB 中的“文档”)。
Flask-PyMongo 架起来 Flask 和 PyMongo 之间的桥梁,因此你能够使用 Flask 正常的机制去配置和连接 MongoDB。

一、快速入门

首先,安装 Flask-PyMongo:

$ pip install Flask-PyMongo

接着,在代码中添加一个 PyMongo:

from flask import Flask
from flask_pymongo import PyMongo

app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/myDatabase"
mongo = PyMongo(app)

PyMongo 连接运行在本机上且端口为 27017 的 MongoDB 服务器。这个数据库能够作为 db 属性被导入。可以在视图中直接使用 db :

@app.route("/")
def home_page():
    online_users = mongo.db.users.find({"online": True})
    return render_template("index.html",
        online_users=online_users)

二、Helpers

Flask-PyMongo 提供一些通用任务的现成方法:
1、find_one_or_404

Collection.find_one_or_404(*args, **kwargs)

查找并返回单个文档,这类似于find_one(),但不返回None,而是导致请求的404 Not Found HTTP状态。

@app.route("/user/<username>")
def user_profile(username):
    user = mongo.db.users.find_one_or_404({"_id": username})
    return render_template("user.html",
        user=user)

2、send_file

PyMongo.send_file(filename, base='fs', version=-1, cache_for=31536000)

用GridFS中的文件响应。
返回包含命名文件的 response_class 的实例,并实现条件获取语义(使用make_conditional())。

@app.route("/uploads/<path:filename>")
def get_upload(filename):
    return mongo.send_file(filename)

参数:

filename (str) – 文件名
base (str) – 要使用的GridFS集合的基名称
version (bool) – 如果为正,则返回由文件名标识的文件的第n个修订版;如果为负,则返回最近的第n个修订版。如果不存在这样的版本,则返回HTTP状态404。
cache_for (int) – 应指示浏览器缓存响应的秒数

3、save_file

PyMongo.save_file(filename, fileobj, base='fs', content_type=None, **kwargs)

使用给定的文件名将类文件对象保存到GridFS。

@app.route("/uploads/<path:filename>", methods=["POST"])
def save_upload(filename):
    mongo.save_file(filename, request.files["file"])
    return redirect(url_for("get_upload", filename=filename))

参数:

filename (str) – 文件名
fileobj (file) – the file-like object to save
base (str) – 要保存的类文件对象
content_type (str) – 文件的content-type。如果为 None, 使用 guess-type() 从文件名判断内容类型
kwargs – 存储在文件文档中的额外属性,直接传递给gridfs.gridfs.put()

三、配置

可以通过向PyMongo构造函数传递MongoDB URI或将其分配给MONGO_URI Flask配置变量来配置Flask PyMongo

app = Flask(__name__)

# connect to MongoDB with the defaults
mongo1 = PyMongo(app, uri="mongodb://localhost:27017/databaseOne")

# connect to another MongoDB database on the same host
mongo2 = PyMongo(app, uri="mongodb://localhost:27017/databaseTwo")

# connect to another MongoDB server altogether
mongo3 = PyMongo(app, uri="mongodb://another.host:27017/databaseThree")

更多请参考
扩展:使用 Flask_sqlalchemy 操作mysql数据库请参考

发布了319 篇原创文章 · 获赞 140 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/m0_37886429/article/details/103868466