MongoDB 与 MongoEngine — Flask 文档

来自菜鸟教程
Flask/docs/1.1.x/patterns/mongoengine
跳转至:导航、​搜索

MongoDB 与 MongoEngine

使用像 MongoDB 这样的文档数据库是关系 SQL 数据库的常见替代方案。 此模式展示了如何使用 MongoEngine(一个文档映射器库)与 MongoDB 集成。

需要一个正在运行的 MongoDB 服务器和 Flask-MongoEngine

pip install flask-mongoengine

配置

基本设置可以通过在 app.config 上定义 MONGODB_SETTINGS 并创建 MongoEngine 实例来完成。

from flask import Flask
from flask_mongoengine import MongoEngine

app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
    "db": "myapp",
}
db = MongoEngine(app)

映射文件

要声明代表 Mongo 文档的模型,请创建一个继承自 Document 的类并声明每个字段。

import mongoengine as me

class Movie(me.Document):
    title = me.StringField(required=True)
    year = me.IntField()
    rated = me.StringField()
    director = me.StringField()
    actors = me.ListField()

如果文档有嵌套字段,使用 EmbeddedDocument 定义嵌入文档的字段,并使用 EmbeddedDocumentField 在父文档上声明它。

class Imdb(me.EmbeddedDocument):
    imdb_id = me.StringField()
    rating = me.DecimalField()
    votes = me.IntField()

class Movie(me.Document):
    ...
    imdb = me.EmbeddedDocumentField(Imdb)

创建数据

使用字段的关键字参数实例化您的文档类。 您还可以在实例化后为字段属性赋值。 然后调用doc.save()

bttf = Movie(title="Back To The Future", year=1985)
bttf.actors = [
    "Michael J. Fox",
    "Christopher Lloyd"
]
bttf.imdb = Imdb(imdb_id="tt0088763", rating=8.5)
bttf.save()

查询

使用类 objects 属性进行查询。 关键字参数在字段上寻找相等的值。

bttf = Movies.objects(title="Back To The Future").get_or_404()

可以通过使用双下划线将它们与字段名称连接来使用查询运算符。 objects 和调用它返回的查询是可迭代的。

some_theron_movie = Movie.objects(actors__in=["Charlize Theron"]).first()

for recents in Movie.objects(year__gte=2017):
    print(recents.title)

文档

使用 MongoEngine 定义和查询文档的方法还有很多。 更多信息请查看官方文档

Flask-MongoEngine 在 MongoEngine 之上添加了有用的实用程序。 也请查看他们的 文档