micromongo egy kis réteg körül pymongo, amely lehetővé teszi, hogy egyszerű ORM-style osztályokat, vagyis képes érvényesítését, hogy pont a dokumentumokhoz való hozzáférést, auto-wrap queryset eredményeket, és adja meg a pre / post mentése horgokat.
Úgy tervezték microframeworks szem előtt, de az alkalmazás és a keret agnosztikus. Ez azt jelentette, hogy egyszerűsítse használata pymongo és eszközöket adnak közös kifejezéseket, hogy ne takarják pymongo vagy MongoDB az adatok közül struktúrákat.
Azt várjuk, hogy a nyitott kérdések vagy küldjön pull kérések micromongo a GitHub
micromongo teszi néhány tervezési döntéseket nevében az egyszerűsítés, hogy lehet, hogy nem működik az Ön számára:
& Nbsp; - & nbsp; micromongo fenntartja egyetlen globális kapcsolat, így nincs modell, hogy csatlakozzon több MongoDB szerverek
& Nbsp; - & nbsp; van egy maroknyi modell nevét és a dokumentum tulajdonságneveket, hogy nem fog működni a micromongo modellek; Ezek fogják fedezni a teljes docs
& Nbsp; - & nbsp; akkor csak egy modellt per gyűjtemény
Kezdés
Hogy kezdjen micromongo, csak importálni:
>>> From micromongo import csatlakozni, Model
>>> C = connect ()
connect úgy érveit pymongo a Connection objektum, és úgy viselkedik, szinte azonos, kivéve, hogy megpróbálja automatikusan vissza lekérdezés eredményét csomagolva a megfelelő modell osztályok. A kapcsolat objektumot, hogy hozzon létre ezen keresztül hívást cache-elt és használják a különböző ORM-stílusú létesítmény, mint Model.save (), Model.proxy, stb Ha szeretne egy tiszta, normál Connection objektumot, akkor kap egy könnyen :
>>> From micromongo import clean_connection
>>> Clean = clean_connection ()
Ne feledje, hogy clean_connection nem veszi az érveket, és mindig visszatér egy tiszta Connection osztály ugyanazokkal a beállításokkal, mint a jelenlegi micromongo kapcsolatot.
Ezekkel kapcsolatban objektumokat, akkor adatbázisok létrehozására, vagy csinálsz, amit ha lenne normális pymongo tárgyak:
>>> Db = c.test_db
>>> Kollekció = db.test_collection
>>> Collection.save ({"docid": 1, "nem": false})
>>> Collection.find_one ()
{U'_id ": objectid (" ... "), u'fail": hamis, u'docid ": 1}
Azt is kijelentem a saját modelljét egy adott gyűjtemény deklaratív stílus:
>>> Class TestModel (Model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; kollekció = 'test_db.test_collection "
>>> Collection.find_one ()
Ezek az osztályok számos további funkciók, mint egy szótár, amely lehet, hogy nekik sokkal kényelmesebb a használata. A dokumentum a gombok minden elérhetővé attribútumok:
>>> T = collection.find_one ()
>>> T.fail
Hamis
>>> T.docid
1
A dokumentumok is könnyen kitartott az adatbázishoz:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ": objectid (" ... "), u'fail": hamis, u'docid ": 17}
meghatározó modellek
Feletti, a gyűjtemény attribútum osztották a Foo modellt. Ez volt egy parancsikont, bár; ha az adatbázis és a gyűjtemény rendelt külön, a Model kitaláljuk, a teljes gyűjtemény nevét. Ha a gyűjtemény és adatbázis nincsenek jelen, micromongo megpróbálja kitalálni alapján az osztály és a modul nevét a Model. Például, blog.Post válik blog.post, vagy stream.StreamEntry lesz stream.stream_entry. Explicit jobb, mint implicit, és ez ösztönözni, hogy állítsa a gyűjtemény kézzel.
Különben is a csomagolás és kicsomagolás adatbázisból származó eredmények, modellek is meghatározhat egy spec dokumentumot, amely meghatározza alapértékekre, és végre érvényesítési mentés előtt a modell. Vegyünk egy triviális blogbejegyzést modell:
>>> From micromongo.spec import *
>>> Class Post (Model):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; kollekció = 'test_db.blog_posts "
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; spec = dict (
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; author = Field (kötelező = True, default = "jmoiron ', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; title = Field (kötelező = False, alap = '', type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; közzé = Field (kötelező = True, default = False, type = [True, False]),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; body = Field (type = 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
Néhány dolog történik itt. Fields, hogy van egy alapértelmezett inicializálódnak, hogy alapértelmezett függetlenül attól, hogy szükséges-e vagy sem. Ha egy kötelező mező nincs alapértelmezett, ez inicializálódnak Nincs.
Fields vehet típusú érvet, amely lehet egy visszahívható, hogy vesz egy értéket, és visszatér igaz vagy hamis, egy vagy több bázis típusú, illetve egy vagy több értéket. Ha egy vagy több választhatók, isinstance használt teszt, hogy az értékek a megfelelő típusú. Ha egy vagy több értéket biztosítunk, a Field működik, mint egy enum típusú, ellenőrzi, hogy az értékek a maga értékrendje. Ha nincs típus megadva, érvényesítési mindig elmegy egy olyan területen, kivéve, ha ez szükséges, és hiányzik.
Ha egy olyan területen, p kap típusa érvénytelen, akkor a ValueError merül fel:
>>> P.title = 10
>>> Kímélő ()
Traceback (legutolsó hívás utolsó):
& Nbsp; ...
ValueError: Keys nem egyezik spec: ['title']
>>> Del p.author
>>> Kímélő ()
Traceback (legutolsó hívás utolsó):
& Nbsp; ...
ValueError: hiányzó mezőket: ['szerző'], érvénytelen mezőket: ['title']
>>> P.title = 'Az első blogpost "
>>> P.author = 'jmoiron "
>>> P.published = True
>>> P.body = u "Ez az első blogbejegyzést .. & nbsp; Olyan izgatott vagyok!"
>>> Kímélő ()
Model.find
A kényelem és száraz, Model.find egy classmethod, amely használni fogja micromongo a kurzort, hogy adjon ki marasztalja el a jobb gyűjteménye. Ez a módszer viselkedik pontosan ugyanaz, mint a pymongo Collection.find.
micromongo a kissé módosított Cursor osztályban is teszi a Django ihletésű order_by módszerrel elérhető az összes kurzorok (megtalálni és bármit láncot, ha visszatér a kurzor). Tudod ki egy vagy több területen neveket, opcionális vezető '-', rendezni a dolgokat növekvő vagy csökkenő sorrendben.
Ezek a változások lehetővé teszik, hogy a leggyakrabban használt a hatalom pymongo anélkül, hogy importálni, és lehetővé teszi, hogy elkerüljék a felesleges ismétlés a helyét az adatokat.
mező alosztályokhoz
Ön arra ösztönzik, hogy saját Fields, hogy csinál, amit akar. Helytelenül alosztály egy horog funkció pre_validate, amely a bejövő érték és képes átalakítani az azonban akarnak. Megjegyzendő, hogy ez csak akkor működik, ha a mezőket ténylegesen jelen van; így, hogy valami, mint egy auto_now_add egy DateTimeField, akkor eldönthetjük, hogy ez szükséges, és a pre_validate kapcsolja be Nincs datetime.datetime.now ().
követelmények :
- Python
Hozzászólás nem található