MongoDB con MongoEngine¶
El uso de una base de datos de documentos como MongoDB es una alternativa común a las bases de datos relacionales SQL. Este patrón muestra cómo utilizar MongoEngine, una biblioteca de mapeo de documentos, para integrarse con MongoDB.
Se requiere un servidor MongoDB en funcionamiento y Flask-MongoEngine.
pip install flask-mongoengine
Configuración¶
La configuración básica puede hacerse definiendo MONGODB_SETTINGS
en app.config
y creando una instancia de MongoEngine
:
from flask import Flask
from flask_mongoengine import MongoEngine
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
"db": "myapp",
}
db = MongoEngine(app)
Documentos de mapeo¶
Para declarar un modelo que represente un documento Mongo, crea una clase que herede de Document
y declara cada uno de los campos
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()
Si el documento tiene campos anidados, utilice EmbeddedDocument
para definir los campos del documento incrustado y EmbeddedDocumentField
para declararlos en el documento padre.
class Imdb(me.EmbeddedDocument):
imdb_id = me.StringField()
rating = me.DecimalField()
votes = me.IntField()
class Movie(me.Document):
...
imdb = me.EmbeddedDocumentField(Imdb)
Creación de datos¶
Instancie su clase documental con argumentos de palabras clave para los campos. También puedes asignar valores a los atributos de los campos después de la instanciación. Luego llama a 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()
Consultas¶
Utiliza el atributo de clase objects
para realizar consultas. Un argumento de palabra clave busca un valor igual en el campo
bttf = Movies.objects(title="Back To The Future").get_or_404()
Los operadores de consulta pueden utilizarse concatenándolos con el nombre del campo mediante un doble guión. Los objetos y las consultas devueltas al llamarlos son iterables:
some_theron_movie = Movie.objects(actors__in=["Charlize Theron"]).first()
for recents in Movie.objects(year__gte=2017):
print(recents.title)
Documentación¶
Hay muchas más formas de definir y consultar documentos con MongoEngine. Para más información, consulta la documentación oficial.
Flask-MongoEngine añade útiles utilidades encima de MongoEngine. Consulta también su documentación.