当涉及到将Flask应用程序连接到MongoDB数据库时,有多种选择。最常用的两个库是MongoEngine和PyMongo。这两个库都有优缺点。本文将突出它们之间的差异,并帮助您选择最适合您用例的库。
MongoEngine是一个库,允许您连接到MongoDB数据库,并使用文档作为代码中的对象。它们将自己称为ODM(对象-文档映射器)。该项目的目标是创建一个类似于其他ORM(对象关系映射)库的库,但用于MongoDB。
它于2015年首次作为开源项目发布,当前版本基于MongoDB的官方Python驱动程序PyMongo构建。
为了帮助您开始,MongoEngine提供了详细的文档,以及一个邮件列表,您可以在那里提问。
PyMongo是MongoDB的官方Python原生驱动程序。它是一个库,允许您连接到MongoDB数据库,并使用MongoDB查询API查询存储的数据。这是与文档数据库交互的推荐方式。
它作为开源项目托管在GitHub上,可以使用Python熟悉的pip
包安装程序进行安装。
除了MongoDB网站上的全面文档外,您还可以在社区论坛中找到帮助。
Flask是一个功能强大的Python微框架,用于使用直观的语法创建网络服务器。
它简单而极其强大,可以用于各种规模的应用程序。结合MongoDB Atlas数据库,可以轻松创建可以访问您数据的API。
为了演示如何使用MongoEngine和PyMongo与Flask一起使用,以下是使用这两个库编写的简单Web服务器和两个路由的代码。
在这些示例中,/create
路由通过随机名称添加一个用户。随机名称使用 names
包生成。/list
路由从数据库检索所有用户并将其列出。您可以从浏览器访问这两个路由。
首先,安装所需的包。
python -m pip install flask mongoengine pymongo[srv] names
然后创建一个文件,其中包含下面的示例代码,设置 FLASK_APP
环境变量以匹配该文件,并使用 flask
命令行界面工具启动服务器。
touch main.py
export FLASK_APP=main
python -m flask run
注意:每次您更改 main.py 中的代码时,都需要使用 Ctrl-C 停止服务器,并再次使用最后一个命令,以确保服务器运行的是最新代码。
服务器运行后,您可以在浏览器中打开 http://127.0.0.1:5000/create 以向数据库添加新条目,以及 http://127.0.0.1:5000/list 以列出用户集合中的所有文档。
您可以在本 Github 仓库 中找到这两个文件。
在 MongoEngine 中,使用 connect
方法连接到数据库,您需要传递 Atlas 提供的 连接字符串。然后,需要创建一个 User
对象。此对象有一个字段用于存储用户的名称。您可以在 Flask 路由中看到,此对象用于在数据库中创建或列出用户。
from flask import Flask
from mongoengine import *
import names
app = Flask(__name__)
connect(host="<CONNECTION_STRING>/flask_example_db")
class User(Document):
name = StringField()
@app.route("/create")
def add_user():
new_user = User(name=names.get_full_name())
new_user.save()
return str(new_user.id)
@app.route("/list")
def get_user():
return User.objects.to_json()
使用 PyMongo,首先创建一个客户端以使用 Atlas 提供的 连接字符串 连接到数据库。然后,使用熟悉的 MongoDB 查询 API 创建或检索数据库中的数据。您也会注意到,此示例需要对新的对象 ID 进行转换。
这是因为 PyMongo 使用 BSON 格式,而不是将其抽象为 JSON 格式。
from pymongo import MongoClient
from flask import Flask
from bson.json_util import dumps
import names
app = Flask(__name__)
client = MongoClient("<CONNECTION_STRING>")
db = client.flask_example_db
@app.route("/create")
def add_user():
result = db.users.insert_one({"name": names.get_full_name()})
return str(result.inserted_id)
@app.route("/list")
def get_user():
users = list(db.users.find({}))
return dumps(users)
这两个库提供不同的功能。MongoEngine 在幕后使用 PyMongo 来管理数据库连接。它旨在为习惯使用 SQLAlchemy 或其他类似 ORM 的开发者提供一个易于入门的方式。这可以减少软件工程师首次接触 MongoDB 和其文档模型时的学习曲线。然而,误用 MongoEngine 可能会带来额外的成本。
PyMongo 是 MongoDB 的官方原生驱动程序。它包含 MongoDB 查询 API 的所有功能。它是执行数据库上的 CRUD(创建-读取-更新-删除)操作的一种强大方式,并提供了一种简单的方式来构建聚合管道。
当直接使用 PyMongo 并利用这些管道的强大功能时,开发者可以使用数据库的全部潜力。使用 PyMongo 还可以避免一些可能导致性能问题的坏习惯,例如在 PyMongo 中批量执行命令而不是在 for
循环中使用 ORM。
MongoEngine 是一个 ODM(对象-文档-映射器),它帮助熟悉其他 ORM 语法的高级软件开发人员连接到 MongoDB 数据库。
当然可以!Flask 结合 PyMongo 是访问存储在 MongoDB 中的数据的绝佳栈。
您可以在 MongoDB 网站上找到教程,了解如何操作。
PyMongo 是 MongoDB 的原生 Python 驱动程序,可以使用以下命令使用 pip 安装。
python -m pip install pymongo[srv]