Python 용 MongoDB ORM? [닫은]


85

sqlalchemy (SQlite)에서 mongodb를 사용하여 마이그레이션하려고합니다. 스키마 확인을 부탁합니다. 나는 mongokit을보고 있지만 매퍼와 유사한 것을 원하므로 dict가 아닌 객체의 속성에서 저장됩니다.

기존 개체를 수정하지 않고 사용할 수 있도록 매퍼를 원합니다.


1
정확히 "DRM"(Document-Resource-Mapping)이라고해야합니다.
zs2020

이것은 당신이 당신의 질의에 답한다 docs.mongodb.org/ecosystem/drivers/php-libraries을
Basav

이 몽골이라는 라이브러리는하자가 속성이나 사전 액세스를 통해 몽고 객체와 상호 작용을 있다고 그리고 당신이 가능하게 할 수있는 스키마 검증 있습니다 github.com/zagaran/mongolia
저쪽으로 네요

@zsong 관계형 및 문서 ... 개체 관계형 및 개체 문서라고 불려야합니까?
Jaime Sangcap 2015

이것은 도움이 될 수 있습니다 : pythonhosted.org/Flask-MongoAlchemy
Xiao

답변:


69

또 다른 옵션은 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()

16
AFAIK. mongoengine의 문서에 속성을 즉시 추가 할 수 없습니다. 어떤 종류의 mongodb에서 재미가 사라집니다.
tutuca 2011 년

9
필요한 경우 DictField를 사용하여 스키마가없는 모든 종류의 데이터를 추가 할 수 있습니다.
뉴먼

아니면 GenericEmbeddedDocument?
tunnuz 2014-04-14

Mongoengine에는 몇 가지 심각한 성능 문제가 있습니다. 프로덕션에서 사용하려는 경우 매우 간단하고 가벼운 스키마가있는 경우에만 작동합니다.
Valerie R. Coffman

3
Python에서 사용할 수있는 MongoDB ORM에 대한보다 포괄적 인 개요를 찾는 사람들을 위해 PyMongo "Tools"페이지에는 그 중 상당수가 나열되어 있으며 정기적으로 유지 관리됩니다. api.mongodb.com/python/current/tools.html
Ascendant

40

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

1
이것은 매우 유용하고 간단합니다. 저는 단지 사전을 작성하는 데 집착하지 않도록 무언가를 원했습니다.
vishalv2050

1
이것은 정말 좋습니다. 더 이상 유지되지 않는 것이 너무 나쁘다 :(
만약 __name__이 None이면 dec

30

당신이 원하는 MongoKit을 . PyMongo 보다 높은 추상화 계층입니다 . 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']}, 
    ]

기존 비즈니스 논리 개체를 수정하지 않고이를 수행 할 수있는 방법이 있습니까? sqlalchemy에서는 매퍼를 사용할 수 있습니다.
Timmy

더 많은 외과 적 변화. 종속성 그래프를 깨끗하게 유지합니다. 이 작업을 직접 수행하는 방법은 모르겠지만 말이됩니다. MongoComputer (컴퓨터, 문서) 클래스 또는 어떤 형태의 믹스와 같은 이상한 것이 있습니까? 흥미로운 ...
Ryan Cox

sqlalchemy에서 그것의 깨끗한, 따라서 질문보다
Timmy

2015 년 이후 mongokit의 코드 변경 사항이없고 2014 년 이후 릴리스가 없습니다. 젠장,이 파이썬 세상을 얻지 못합니다 :(.
JAR.JAR.beans

15

이 질문에 정말 늦었 음을 알고 있지만 SQLAlchemy에서 영감을 얻은 MongoDB 유효성 검사 및 ORM 엔진 인 Ming http://merciless.sourceforge.net 의 저자입니다 . 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))

Ming은 우리에게 갈 길을 보여줍니다. 유연성과 우리가 필요로하는 스키마 식 개념을 모두 갖추고 있습니다. 전원이 필요할 때 pymongo로 내려갑니다.
jochem

1
저는 mongo와 python을 처음 사용합니다. django의 model.py와 같은 모델을 생성하고 Ming을 사용하여 마이그레이션 스크립트를 생성하기 위해 참조 할 수있는 튜토리얼이 있습니까?
Varad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.