micromongo este un strat mic în jurul pymongo care vă permite să creați clase de tip ORM simple, care pot efectua de validare, permit accesul la punct documentele rezultate queryset auto-înfășurare, și vă va oferi pre / post Salvați cârlige.
Este proiectat cu microframeworks în minte, dar este aplicație și cadru agnostic. Se are menirea de a simplifica utilizarea pymongo și să ofere instrumente pentru expresii comune, să nu ascundă pymongo sau MongoDB din structurile de date.
Sunteți binevenit să deschidă probleme sau trimite cereri de tragere pe github micromongo lui
micromongo face câteva decizii de design, în numele simplificare care ar putea să nu lucreze pentru tine:
& Nbsp; - & nbsp; micromongo menține o singură conexiune la nivel mondial, astfel încât să nu poate avea modele care se conectează la mai multe servere MongoDB
& Nbsp; - & nbsp; există o handfull de nume de modele și nume de atribute de documente care nu vor lucra cu modele micromongo; acestea vor fi acoperite în docs complete
& Nbsp; - & nbsp; poti avea doar un singur model pe colectare
Noțiuni de bază
Pentru a începe cu micromongo, doar de import:
>>> Din conecta micromongo import, Model
>>> C = conectare ()
connect ia aceleași argumente ca obiect Connection pymongo lui, și se comportă aproape identic, cu excepția faptului că încearcă să se întoarcă în mod automat rezultatele interogării împachetate în clasele modelul potrivit. Obiectul de conexiune pe care îl creați prin intermediul acestui apel vor fi în cache și utilizate de către diverse facilități ORM stil, cum ar fi Model.save (), Model.proxy, etc Dacă doriți un obiect curat, Conexiune standard, puteți obține unul cu ușurință :
>>> Din micromongo clean_connection import
>>> Curat = clean_connection ()
Rețineți că clean_connection nu ia argumentele și va reveni întotdeauna o clasă conexiune curat, cu aceleași setări ca conexiunea curentă micromongo.
Cu aceste obiecte de conectare, puteți crea baze de date sau de a face orice ați face cu obiecte normale pymongo:
>>> Db = c.test_db
>>> Colectare = db.test_collection
>>> Collection.save ({"docId": 1, "nu": Fals})
>>> Collection.find_one ()
{U'_id ": ObjectId (" ... "), u'fail": Fals, u'docid ": 1}
Puteți declara, de asemenea, propriul model pentru o anumită colecție în stil declarativ:
>>> TestModel clasă (model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; colectare = 'test_db.test_collection'
>>> Collection.find_one ()
Aceste clase au un număr de caracteristici suplimentare de peste un dicționar care poate le fac mult mai ușor de utilizat. Tastele de documente sunt accesibile ca atribute:
>>> T = collection.find_one ()
>>> T.fail
Fals
>>> T.docid
1
Documentele sunt, de asemenea, ușor persistat la baza de date:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ": ObjectId (" ... "), u'fail": Fals, u'docid ": 17}
Modele care definesc
Deasupra, atributul de colectare a fost însărcinată modelul nostru Foo. Aceasta a fost o comandă rapidă, deși; dacă baza de date și colectare sunt atribuite separat, modelul poate da seama numele de colectare complet. În cazul în care colectarea și baza de date nu sunt prezente, micromongo încearcă să-l dau seama bazat pe clasă și modul numele modelului dumneavoastră. De exemplu, blog.Post va deveni blog.post, sau stream.StreamEntry va deveni stream.stream_entry. Explicită este mai bună decât implicit, și este încurajat să setați manual colecția.
În afară de ambalare și despachetarea rezultatele din baza de date, modele pot defini, de asemenea, un document spec care pot defini valori implicite și de a efectua validare înainte de a salva modelul. Atunci model de blog banal:
>>> Din import micromongo.spec *
>>> Clasă Publica (model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; colectare = 'test_db.blog_posts'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; spec = dict (
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; autor = Field (necesar = True, implicit = 'jmoiron', tip = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; title = Field (necesar = False, implicit = '', tip = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; publicat = Field (necesar = True, implicit = False, tip = [Adevărat, Fals]),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; corp = Field (tip = unicode),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; timestamp = Field (),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; )
>>> P = Post.new ()
>>> P
Câteva lucruri merg pe aici. Câmpurile care au o implicit este pregătit pentru a că implicit dacă acestea sunt necesare sau nu. În cazul în care un câmp obligatoriu nu are un implicit, este inițializat la Niciunul.
Domenii pot lua un argument de tip, care poate fi un apelabilă care ia o valoare și returnează Adevărat sau fals, o sau mai multe tipuri de bază, sau una sau mai multe valori. În cazul în care sunt prevăzute una sau mai multe tipuri de, isinstance este folosit pentru a testa că valorile sunt de tip dreapta. În cazul în care sunt prevăzute una sau mai multe valori, domeniul acționează ca un tip enumerare, verificarea că valorile sunt în setul său de valori. În cazul în care nici un tip este dat, validare trece mereu pe un câmp decât dacă este necesar și absent.
Dacă un câmp în p este dat un tip de invalid, atunci o ValueError se ridică:
>>> P.title = 10
>>> P.save ()
Traceback (cel mai recent apel ultima):
& Nbsp; ...
ValueError: Chei nu sa potrivit cu spec: ['title']
>>> Del p.author
>>> P.save ()
Traceback (cel mai recent apel ultima):
& Nbsp; ...
ValueError: câmpuri lipsă: ["autorul"], domenii nevalide: ['title']
>>> P.title = 'Prima mea blogpost "
>>> P.author = 'jmoiron'
>>> P.published = True
>>> P.body = u "Acesta este primul meu post pe blog .. & nbsp; Sunt atât de emoționată!"
>>> P.save ()
Model.find
Pentru confortul și DRY, Model.find este un classmethod care va folosi cursorul micromongo de a emite o descoperire împotriva colectării dreapta. Această metodă se comportă exact la fel ca Collection.find pymongo lui.
clasă Cursor ușor modificate micromongo a face, de asemenea, o metodă order_by inspirat django disponibil pentru toate cursoarele (găsi și tot ce-ti lanț oprește dacă aceasta returnează o cursor). Puteți trece unul sau mai multe nume de câmpuri, cu o conducere opțional "-", pentru a sorta lucrurile prin ordine crescătoare sau descrescătoare.
Aceste modificări vă permit să utilizați cea mai mare parte a puterii de pymongo fără a fi nevoie să-l importe, și vă permite să evita repetarea inutilă a locației datelor.
câmp subclasarea
Sunteți încurajat să creați propriile câmpuri care fac ceea ce vrei. Subclase de teren au un pre_validate funcție cârlig care ia o valoare de intrare și poate transforma însă doresc. Rețineți că aceasta va funcționa doar în cazul în care câmpurile sunt de fapt prezente; astfel încât pentru a obține ceva de genul o auto_now_add pe un DateTimeField, veți dori să facă cerute, precum și pre_validate sa transforme Fără specialitate în datetime.datetime.now ()
Cerințe :.
- Python
Comentariile nu a fost găsit