誰かがMongoKit、MongoEngine、Flask-MongoAlchemy for Flaskの経験がありますか?MongoKit vs MongoEngine vs Flask-MongoAlchemy for Flask
どちらをお好みですか?肯定的または否定的な経験? Flask-Newbieのオプションが多すぎます。
誰かがMongoKit、MongoEngine、Flask-MongoAlchemy for Flaskの経験がありますか?MongoKit vs MongoEngine vs Flask-MongoAlchemy for Flask
どちらをお好みですか?肯定的または否定的な経験? Flask-Newbieのオプションが多すぎます。
私はMongoDBの一般的なPython ORMを評価するのに多くの時間を費やしました。私は本当に1つを選びたかったので、これは徹底的な運動でした。
私の結論は、ORMがMongoDBからの不幸を取り除くことです。誰も私が最初にリレーショナルデータベースから離れさせるような制限を課しています。
また、私は本当にORMを使いたいと思っていましたが、今ではpymongo
を使用すると直接行くことができると確信しています。今、私はMongoDB、、およびPythonを包含するパターンに従います。
リソース指向アーキテクチャは、非常に自然な表現につながります。たとえば、次のユーザーのリソース取る:
from werkzeug.wrappers import Response
from werkzeug.exceptions import NotFound
Users = pymongo.Connection("localhost", 27017)["mydb"]["users"]
class User(Resource):
def GET(self, request, username):
spec = {
"_id": username,
"_meta.active": True
}
# this is a simple call to pymongo - really, do
# we need anything else?
doc = Users.find_one(spec)
if not doc:
return NotFound(username)
payload, mimetype = representation(doc, request.accept)
return Response(payload, mimetype=mimetype, status=200)
def PUT(self, request, username):
spec = {
"_id": username,
"_meta.active": True
}
operation = {
"$set": request.json,
}
# this call to pymongo will return the updated document (implies safe=True)
doc = Users.update(spec, operation, new=True)
if not doc:
return NotFound(username)
payload, mimetype = representation(doc, request.accept)
return Response(payload, mimetype=mimetype, status=200)
をResource
基底クラスは
class Resource(object):
def GET(self, request, **kwargs):
return NotImplemented()
def HEAD(self, request, **kwargs):
return NotImplemented()
def POST(self, request, **kwargs):
return NotImplemented()
def DELETE(self, request, **kwargs):
return NotImplemented()
def PUT(self, request, **kwargs):
return NotImplemented()
def __call__(self, request, **kwargs):
handler = getattr(self, request.method)
return handler(request, **kwargs)
のような私が直接
WSGI
スペックを使用することに注意してください、そして、レバレッジ
Werkzeug
可能(ちなみに、私が思うに見えます
Flask
は不要な合併症を
Werkzeug
に追加します)。
機能representation
は、要求のAccept
ヘッダをとり、そして適切な表現(例えば、application/json
、又はtext/html
)を生成します。実装するのは難しくありません。 Last-Modified
ヘッダーも追加されます。
もちろん、あなたの入力は消毒される必要があり、提示されたコードは機能しません(私は例として意味しますが、私のことを理解することは難しくありません)。
また、私はすべてを試しましたが、このアーキテクチャーは柔軟でシンプルで拡張可能なコードにしました。
+1。 Mongoの上にORMは必要ありません。 Pymongoを直接使用すると、完全な自由が得られます。 – sojin
優秀な答え! – RubyGladiator
私はこの回答が気に入っていますが、ほとんどの場合、mongoのベストプラクティスはフィールド名を短くすることであるため、単にmongoコレクションを直接返すだけでは簡単ではないことに注意してください...特にユーザーのコレクションサイトがトラフィックが多い場合)や分析データなど。基本的に、私の質問は、あなたの残りのアプリケーションで短縮された場合、フィールド名を変換する方法についてはどうですか? (ディスクとメモリの消費を節約するためにu - > username、e - > emailなど) – Jordan
このユーザーの質問を終了するには少し厳しいですね。私はそれが役に立ちました。 – RubyGladiator
同上、私もそれが役に立つと思った。 – Tim
優秀な答え、私はそれが役に立つと思った、私は他の人が良いアイデアを持っていると賭ける - 再オープン? –