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)
Сопоставление документов
Для объявления модели, представляющей документ MongoDB, создайте класс, унаследованный от 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. Ознакомьтесь также с их документацией.
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/3.0.x/patterns/mongoengine/