Domanda

Con funzioni collection.find o collection.findone() risultati predefiniti in un tipo dizionario e se si passa paramater as_class=SomeUserClass che cercherà di analizzare il risultato in questo formato di classe. ma sembra questa classe dovrebbe essere derivata classe di dizionario (come ha richiesto la funzione __setitem__ da definire e posso aggiungere chiavi nella classe). Qui voglio impostare le proprietà della classe. come posso fare raggiungere questo obiettivo? Inoltre, la mia classe di raccolta contiene alcune classi figlie come proprietà .Quindi Come è possibile impostare le proprietà delle classi figlie anche.

È stato utile?

Soluzione 2

Ho risolto questo con l'aggiunta di __setitem__ in classe. di me

result = as_class()
for key,value in dict_expr.items():
        result.__setitem__(key,value)

e nella mia classe __setitem__ è come

def __setitem__(self,key,value):
     try:
        attr = getattr(class_obj,key)
        if(attr!=None):
            if(isinstance(value,dict)):
                for child_key,child_value in value.items(): 
                    attr.__setitem__(child_key,child_value)
                setattr(class_obj,key,attr)
            else:
                setattr(class_obj,key,value)

    except AttributeError:
       pass

Altri suggerimenti

Sembra che si desidera qualcosa di simile a un mapper object-relational. Io sono il principale autore di uno Ming , ma esistono molti altri per Python pure. In Ming, si potrebbe procedere come segue per configurare il mapping:

from ming import schema, Field
from ming.orm import (mapper, Mapper, RelationProperty, 
    ForeignIdProperty)

WikiDoc = collection(‘wiki_page', session,
    Field('_id', schema.ObjectId()),
    Field('title', str, index=True),
    Field('text', str))
CommentDoc = collection(‘comment', session,
    Field('_id', schema.ObjectId()),
    Field('page_id', schema.ObjectId(), index=True),
    Field('text', str))

class WikiPage(object): pass
class Comment(object): pass

ormsession.mapper(WikiPage, WikiDoc, properties=dict(
    comments=RelationProperty('WikiComment')))
ormsession.mapper(Comment, CommentDoc, properties=dict(
    page_id=ForeignIdProperty('WikiPage'),
    page=RelationProperty('WikiPage')))

Mapper.compile_all()

Poi si può interrogare per qualche pagina specifica tramite:

pg = WikiPage.query.get(title='MyPage')
pg.comments # loads comments via a second query from MongoDB

I vari ODM io conosca per MongoDB in Python sono elencati di seguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top