公告隆重推出 MongoDB 8.0,史上最快的 MongoDB!了解更多 >>隆重推出 MongoDB 8.0,史上最快的 MongoDB!>>
如何在Python中连接MongoDB

MongoEngine与Pymongo在Flask中的比较

当涉及到将Flask应用程序连接到MongoDB数据库时,有多种选择。最常用的两个库是MongoEngine和PyMongo。这两个库都有优缺点。本文将突出它们之间的差异,并帮助您选择最适合您用例的库。

什么是MongoEngine?

MongoEngine是一个库,允许您连接到MongoDB数据库,并使用文档作为代码中的对象。它们将自己称为ODM(对象-文档映射器)。该项目的目标是创建一个类似于其他ORM(对象关系映射)库的库,但用于MongoDB。

它于2015年首次作为开源项目发布,当前版本基于MongoDB的官方Python驱动程序PyMongo构建。

为了帮助您开始,MongoEngine提供了详细的文档,以及一个邮件列表,您可以在那里提问。

什么是PyMongo?

PyMongo是MongoDB的官方Python原生驱动程序。它是一个库,允许您连接到MongoDB数据库,并使用MongoDB查询API查询存储的数据。这是与文档数据库交互的推荐方式。

它作为开源项目托管在GitHub上,可以使用Python熟悉的pip包安装程序进行安装。

除了MongoDB网站上的全面文档外,您还可以在社区论坛中找到帮助。

如何在Flask中使用MongoEngine和PyMongo

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 与 Flask

在 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 与 Flask

使用 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 的比较

这两个库提供不同的功能。MongoEngine 在幕后使用 PyMongo 来管理数据库连接。它旨在为习惯使用 SQLAlchemy 或其他类似 ORM 的开发者提供一个易于入门的方式。这可以减少软件工程师首次接触 MongoDB 和其文档模型时的学习曲线。然而,误用 MongoEngine 可能会带来额外的成本。

PyMongo 是 MongoDB 的官方原生驱动程序。它包含 MongoDB 查询 API 的所有功能。它是执行数据库上的 CRUD(创建-读取-更新-删除)操作的一种强大方式,并提供了一种简单的方式来构建聚合管道。

当直接使用 PyMongo 并利用这些管道的强大功能时,开发者可以使用数据库的全部潜力。使用 PyMongo 还可以避免一些可能导致性能问题的坏习惯,例如在 PyMongo 中批量执行命令而不是在 for 循环中使用 ORM。

总结

PyMongo 和 MongoEngine 都可以用于访问 MongoDB 数据库中的数据。

然而,它们以非常不同的方式工作,并提供了不同的功能。PyMongo是MongoDB推荐的库。它使得使用MongoDB文档变得简单,并直接映射到熟悉的MongoDB查询语言。如果您之前使用过mongosh等工具,那么语法对您来说会非常熟悉。

除了熟悉的语法外,当使用PyMongo时,您将能够使用Atlas提供的所有高级功能,例如聚合管道Atlas搜索

有关使用Python与MongoDB的更多信息,请参阅以下资源。

常见问题解答

什么是MongoEngine?

MongoEngine 是一个 ODM(对象-文档-映射器),它帮助熟悉其他 ORM 语法的高级软件开发人员连接到 MongoDB 数据库。

我可以在 Flask 中使用 MongoDB 吗?

当然可以!Flask 结合 PyMongo 是访问存储在 MongoDB 中的数据的绝佳栈。

您可以在 MongoDB 网站上找到教程,了解如何操作。

如何安装 PyMongo?

PyMongo 是 MongoDB 的原生 Python 驱动程序,可以使用以下命令使用 pip 安装。

python -m pip install pymongo[srv]

Flask 用途是什么?

Flask 是一个用于在 Python 中创建 Web 服务器的微框架。它使用简单,在创建 Python 中的 API 时非常强大。语法易于理解,并且与 PyMongo 配合得非常好,可以连接到 MongoDB 数据库。