अजगर के लिए MongoDB ORM? [बन्द है]


85

मैं sqlalchemy (SQlite) से mongodb का उपयोग करने के लिए पलायन करने की कोशिश कर रहा हूं। मुझे स्कीमा वर्टिसिफिकेशन चाहिए। मैं mongokit को देख रहा हूं, लेकिन मैं कुछ ऐसा चाहता हूं जो मैपर्स के समान हो, ताकि यह ऑब्जेक्ट की संपत्ति से बचाएगा, और एक तानाशाह नहीं।

मुझे एक मैपर चाहिए ताकि मैं उन्हें संशोधित किए बिना मौजूदा वस्तुओं का उपयोग कर सकूं।


1
संक्षेप में, इसे "DRM" (डॉक्यूमेंट-रिसोर्स-मैपिंग) कहा जाना चाहिए
zs2020

यह आपको अपने प्रश्न का जवाब की मदद करनी चाहिए docs.mongodb.org/ecosystem/drivers/php-libraries
Basav

वहाँ एक पुस्तकालय है जिसे मंगोलिया कहा जाता है कि आप विशेषताओं या शब्दकोश एक्सेस के माध्यम से मोंगो वस्तुओं के साथ बातचीत करते हैं और स्कीमा सत्यापन है जिसे आप सक्षम कर सकते हैं: github.com/zagaran/mongolia
Zags

@zsong रिलेशनल और डॉक्यूमेंट ... नॉट को ऑब्जेक्ट रिलेशनल और ऑब्जेक्ट डॉक्यूमेंट कहा जाना चाहिए?
Jaime Sangcap

यह मददगार हो सकता है: pythonhosted.org/Flask-MongoAlchemy
जिओ

जवाबों:


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 के दस्तावेज़ के लिए मक्खी पर गुण नहीं जोड़ सकते। किस तरह की मौज-मस्ती से कुछ मज़ा आता है।
टूटू

9
यदि आवश्यक हो तो आप किसी भी प्रकार की पूर्ण योजना डेटा जोड़ने के लिए DictField का उपयोग कर सकते हैं।
नीम

या GenericEmbeddedDocument?
ट्यूनुज़

Mongoengine में कुछ गंभीर प्रदर्शन मुद्दे हैं। यदि आप इसे उत्पादन में उपयोग करना चाहते हैं, तो यह केवल तभी काम करेगा जब आपके पास बहुत ही सरल, हल्का स्कीमा हो।
वैलेरी आर। कॉफमैन

3
एक अधिक व्यापक MongoDB ORMs का अजगर, PyMongo के लिए उपलब्ध सिंहावलोकन की तलाश में उन लोगों के लिए "उपकरण" पेज सूचियों काफी उनमें से कुछ, और नियमित रूप से बनाए रखा है: api.mongodb.com/python/current/tools.html
लग्न

40

MongoKit या MongoEngine से संतुष्ट नहीं होने पर, मैंने पायथन के लिए अपना ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस लिखने का फैसला किया।

मैंने सभी प्रश्नों को सीधे pymongo को सौंप दिया है, इसलिए क्वेरी सिंटैक्स वही है। अधिकतर, यह परिणामों के इर्द-गिर्द सिर्फ एक वस्तु-आवरण होता है, जिसमें कुछ अन्य सहायकों जैसे डेटाबेस कनेक्शन पूलिंग, डीबीआरएफ समर्थन, और आपके जीवन को आसान बनाने के लिए अन्य सुविधा विधियां होती हैं।

इसे मिनीमोंगो कहा जाता है और यह गीथूब से उपलब्ध है। हैप्पी हैकिंग!

उदाहरण:

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__

30

आप MongoKit चाहते हैं । यह PyMongo की तुलना में अमूर्तता की एक परत है । सुनिश्चित नहीं हैं कि आप Django का उपयोग कर रहे हैं, लेकिन django-mongokit एकीकरण भी है।

इस ब्लॉग पोस्ट से उदाहरण । ध्यान दें कि कंप्यूटर का उदाहरण तब संरचना को परिभाषित करने के बाद सीधे मेक / मॉडल को संदर्भित कर सकता है (उदाहरण के लिए 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 में, आप मैपर का उपयोग कर सकते हैं।
टिम्मी

अधिक सर्जिकल परिवर्तन। अपने निर्भरता ग्राफ को साफ रखता है। समझ में आता है, हालांकि मुझे सीधे ऐसा करने का कोई तरीका नहीं दिखता है। शायद वर्ग MongoComputer (कंप्यूटर, दस्तावेज़) या मिश्रण के कुछ रूप के साथ कुछ अजीब है? दिलचस्प ...
रयान कॉक्स

sqlalchemy में इसकी सफाई, इस प्रकार सवाल, धन्यवाद
टिम्मी

2015 के बाद से मोंगोकिट में कोई कोड नहीं बदला गया और 2014 के बाद से कोई रिलीज नहीं हुई। लानत है, मुझे यह अजगर दुनिया में नहीं मिलता है :(।
JAR.JAR.beans

15

मुझे पता है कि मैं वास्तव में इस प्रश्न के लिए देर से हूं, लेकिन मैं मिंग http://merciless.sourceforge.net , SQLAlchemy- प्रेरित MongoDB सत्यापन और ORM इंजन के लेखक हूं । यह वह है जो हम SourceForge पर उपयोग करते हैं, और http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-ming पर उपलब्ध केस अध्ययन के साथ-साथ एक उचित प्रस्तुति उपलब्ध है SQLAlchemy से मिंग http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2 पर माइग्रेट करना । मिंग (ट्यूटोरियल से) में 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))

मिंग हमें जाने के लिए रास्ता लगता है। इसमें लचीलापन और स्कीमा-ईश अवधारणाएं हैं जिनकी हमें आवश्यकता है। जब हमें शक्ति की आवश्यकता होती है तो हम पाइमॉन्गो को छोड़ देते हैं।
जोकेम

1
मैं मोंगो और अजगर के लिए नया हूं। वहाँ एक ट्यूटोरियल है जहाँ मैं django के Model.py जैसे मॉडल बनाने और मिंग का उपयोग करके माइग्रेशन स्क्रिप्ट बनाने के लिए संदर्भित कर सकता हूँ।
वरद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.