Spec-Zone.ru › Flask 2.0

MongoDB с MongoEngine

Использование базы данных документов, такой как MongoDB, является распространенной альтернативой реляционным базам данных SQL. Этот шаблон демонстрирует, как использовать MongoEngine, библиотеку маппера документов, для интеграции с MongoDB.

Требуется работающий сервер MongoDB и Flask-MongoEngine.

pip install flask-mongoengine

Настройка

Базовая настройка может быть выполнена путем определения MONGODB_SETTINGS в app.config и создания экземпляра 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. Также ознакомьтесь с их документацией.

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/1.0.x/patterns/mongoengine/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API