MongoEngineを使用したMongoDB—フラスコのドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/patterns/mongoengine
移動先:案内検索

MongoEngineを使用したMongoDB

MongoDBのようなドキュメントデータベースを使用することは、リレーショナルSQLデータベースの一般的な代替手段です。 このパターンは、ドキュメントマッパーライブラリである MongoEngine を使用してMongoDBと統合する方法を示しています。

実行中のMongoDBサーバーと Flask-MongoEngine が必要です。

pip install flask-mongoengine

設定

基本的なセットアップは、app.configMONGODB_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の上に便利なユーティリティを追加します。 彼らのドキュメントもチェックしてください。