sqlalchemy(SQlite)からmongodbを使用するように移行しようとしています。スキーマの垂直化をお願いします。私はmongokitを見ていますが、マッパーに似たものが必要です。これにより、dictではなく、オブジェクトのプロパティから保存されます。
既存のオブジェクトを変更せずに使用できるように、マッパーが欲しいのですが。
sqlalchemy(SQlite)からmongodbを使用するように移行しようとしています。スキーマの垂直化をお願いします。私はmongokitを見ていますが、マッパーに似たものが必要です。これにより、dictではなく、オブジェクトのプロパティから保存されます。
既存のオブジェクトを変更せずに使用できるように、マッパーが欲しいのですが。
回答:
もう1つのオプションはMongoEngineです。MongoEngineのORMは、Djangoで使用されるORMと非常によく似ています。
例(チュートリアルから):
class Post(Document):
title = StringField(max_length=120, required=True)
author = ReferenceField(User)
class TextPost(Post):
content = StringField()
class ImagePost(Post):
image_path = StringField()
class LinkPost(Post):
link_url = StringField()
MongoKitとMongoEngineのどちらにも満足できなかったので、Python用に独自のオブジェクト指向インターフェースを作成することにしました。
すべてのクエリを直接pymongoに委任したので、クエリの構文は同じです。ほとんどの場合、これは結果の単なるオブジェクトラッパーであり、データベース接続プール、DBRefサポート、その他の便利なメソッドなど、作業を楽にする他のヘルパーが含まれています。
Minimongoと呼ばれ、githubから入手できます。ハッピーハッキング!
例:
from minimongo import Model, MongoCollection
class MyObject(Model):
model = MongoCollection(database='test', collection='my_collection')
m = MyObject()
m.x = 1
m.field = 'value'
m.other = {'list': True}
m.save()
x = MyObject({'x': 1, 'y': 2}).save()
objs = MyObject.find({'x': 1})
for o in objs:
print o
MongoKitが必要です。これは、PyMongoよりも1層高い抽象化レイヤーです。Djangoを使用しているかどうかはわかりませんが、django-mongokitもあります統合もあります。
このブログ投稿の例。構造が定義されると、Computerのインスタンスはmake / modelを直接参照できることに注意してください(例:atari.make、c64.model、...)。辞書は必要ありません:
import datetime
from mongokit import Document
class Computer(Document):
structure = {
'make': unicode,
'model': unicode,
'purchase_date': datetime.datetime,
'cpu_ghz': float,
}
validators = {
'cpu_ghz': lambda x: x > 0,
'make': lambda x: x.strip(),
}
default_values = {
'purchase_date': datetime.datetime.utcnow,
}
use_dot_notation = True
indexes = [
{'fields': ['make']},
]
私はこの質問に本当に遅れていることを知っていますが、私はMing http://merciless.sourceforge.netの著者であり、SQLAlchemyに触発されたMongoDB検証およびORMエンジンです。これはSourceForgeで使用しているものであり、http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-mingで利用可能な合理的なプレゼンテーションと、 SQLAlchemyからMingへの移行http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2。MingのORMレイヤーの例を次に示します(チュートリアルから)。
class WikiPage(MappedClass):
class __mongometa__:
session = session
name = 'wiki_page'
_id = FieldProperty(schema.ObjectId)
title = FieldProperty(str)
text = FieldProperty(str)
comments=RelationProperty('WikiComment')
クエリは、標準のMongoDBクエリ構文を使用します(Django ORMの魔法のキーワード引数ではありません)。
WikiComment.query.find(dict(page_id=wp._id))