micromongo ist eine winzige Schicht um pymongo, die Sie einfache ORM-Style-Klassen, die Validierung durchgeführt werden können, ermöglichen dot Zugang zu Dokumenten, Auto-Wrap queryset Ergebnisse und geben Ihnen pre / post speichern Haken zu erstellen.
Es ist mit microframeworks konzipiert, ist aber Anwendung und Agnostiker Rahmen. Es soll Benutzung pymongo vereinfachen und Instrumente für gemeinsame Idiome nicht pymongo oder mongodb von Ihrem Datenstrukturen verschleiern.
Sie sind herzlich eingeladen, um Themen zu öffnen oder per Pull Requests auf micromongo die Github
micromongo macht ein paar Design-Entscheidungen im Namen der Vereinfachung, die nicht für Sie arbeiten könnte:
& Nbsp; - & nbsp; micromongo hält eine einzige globale Verbindung, so dass Sie nicht über Modelle, die auf mehrere mongodb Servern herstellen
& Nbsp; - & nbsp; Es gibt eine Handvoll Modellnamen und Dokumentattributnamen, die nicht mit micromongo Modelle funktionieren wird; diese werden in den Voll docs abgedeckt werden
& Nbsp; - & nbsp; Sie können nur ein Modell pro Sammlung
Erste Schritte
Zum Auftakt mit micromongo, nur importieren:
>>> Von micromongo Import verbinden, Modell
>>> C = connect ()
erfolgt zunächst die gleichen Argumente wie Connection-Objekt pymongo ist, und verhält sich nahezu identisch, außer, dass es versucht, automatisch die Abfrageergebnisse in die entsprechenden Modellklassen verpackt zurück. Das Verbindungsobjekt, das Sie über diese Aufforderung zu erstellen wird zwischengespeichert und von den verschiedenen ORM-Stil Einrichtungen verwendet werden, wie Model.save (), Model.proxy, etc. Wenn Sie ein sauberes, Standard-Verbindungsobjekt möchten, können Sie einen leicht zu bekommen :
>>> Von micromongo Import clean_connection
>>> Sauber = clean_connection ()
Beachten Sie, dass clean_connection keine Argumente übernehmen und wird immer eine saubere Verbindungsklasse mit den gleichen Einstellungen wie die aktuelle micromongo Verbindung zurückzukehren.
Mit diesen Verbindungsobjekten, können Sie Datenbanken erstellen oder tun, was würden Sie mit normalen pymongo Objekte:
>>> Db = c.test_db
>>> Sammlung = db.test_collection
>>> Collection.save ({"docid": 1, "nicht ausreichend": False})
>>> Collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ": 1}
Sie können auch Ihr eigenes Modell erklären, für eine bestimmte Sammlung in deklarativen Stil:
>>> Klasse TestModel (Modell):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Sammlung = 'test_db.test_collection'
>>> Collection.find_one ()
Diese Klassen haben eine Reihe von zusätzlichen Funktionen in einem Wörterbuch, das machen sie viel bequemer zu bedienen. Die Dokument-Tasten sind zugänglich als Attribute:
>>> T = collection.find_one ()
>>> T.fail
Falsch
>>> T.docid
1
Die Dokumente werden auch leicht an die Datenbank fort:
>>> T.docid = 17
>>> T.save ()
>>> Clean.test_db.test_collection.find_one ()
{U'_id ': ObjectId (' ... '), u'fail': False, u'docid ": 17}
Definition-Modelle
Oben wurde die Sammlung Attribut, um unsere Foo Modell zugeordnet. Das war eine Abkürzung, obwohl; Wenn Datenbank und Sammlung separat zugewiesen ist, können die Modell herauszufinden, die vollständige Sammlung Namen. Wenn die Sammlung und die Datenbank nicht vorhanden sind, versucht micromongo, es herauszufinden, basierend auf der Klasse und Modul-Namen Ihres Modells. Zum Beispiel wird blog.Post werden blog.post oder stream.StreamEntry wird stream.stream_entry werden. Explicit ist besser als implizit, und es wird empfohlen, dass Sie die Sammlung von Hand einstellen.
Neben Ein- und Auspacken Ergebnisse aus der Datenbank können die Modelle auch eine spec Dokument die Standardwerte zu definieren und durchzuführen, die Validierung vor dem Speichern des Modells definieren. Werfen Sie einen Blog-Post trivial Modell:
>>> Von micromongo.spec import *
>>> Class Post (Modell):
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Sammlung = '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 (erforderlich = True, default = "jmoiron" type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; title = Field (erforderlich = False, default = "", type = basestring),
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; veröffentlicht = Field (erforderlich = True, Standard = 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 ()
>>> S.
Ein paar Dinge sind hier los ist. Felder, die einen Standardwert haben werden zu diesem Standard ob sie erforderlich sind oder nicht initialisiert. Wenn ein erforderliches Feld keinen Standardmäßig ist es auf keine initialisiert.
Felder können eine Typargument, die entweder eine aufrufbare, die einen Wert nimmt und gibt wahr oder falsch, eine oder mehrere Basistypen oder einen oder mehrere Werte annehmen kann. Wenn eine oder mehrere Arten zur Verfügung gestellt werden, wird isinstance verwendet, um zu testen, dass Werte der richtige Typ. Wenn ein oder mehrere Werte vorgesehen sind, wirkt das Feld als Aufzählungstyp, Überprüfen, dass Werte in seinem Satz von Werten. Wird kein Typ angegeben, Validierung geht immer auf einem Feld, wenn es erforderlich ist, und abwesend.
Wenn ein Feld in p ist eine ungültige Typ angegeben, so wird ein Valueerror wird ausgelöst:
>>> P.title = 10
>>> P.SAVE ()
Traceback (jüngste Aufforderung zuletzt):
& Nbsp; ...
Valueerror: Die Schlüssel nicht überein Spezifikation: ['title']
>>> Del p.author
>>> P.SAVE ()
Traceback (jüngste Aufforderung zuletzt):
& Nbsp; ...
Valueerror: Fehlende Felder: ['Autor'], Ungültige Felder: ['title']
>>> P.title = 'Mein erster Blogpost "
>>> P.author = 'jmoiron'
>>> P.published = True
>>> P.body = u "Dies ist mein erster Blog-Post .. & nbsp; ich bin so aufgeregt!"
>>> P.SAVE ()
Model.find
Für die Bequemlichkeit und DRY ist Model.find ein Class die micromongo der Cursor verwenden, um eine Suche gegen die rechte Sammlung ausstellt. Dieses Verfahren verhält sich genau so wie die pymongo Collection.find.
micromongo die leicht modifizierte Cursor-Klasse macht auch eine Django-inspirierten order_by Verfahren für alle Cursor (zu finden und alles, was Sie aus Kette, wenn es einen Cursor zurückgibt). Sie können eine oder mehrere Feldnamen übergeben, mit einem optionalen führenden '-', die Dinge beim auf- oder absteigender Reihenfolge zu sortieren.
Diese Änderungen können Sie die meisten der Macht pymongo, ohne sie zu importieren verwenden, und Sie können überflüssige Wiederholung der Position der Daten zu vermeiden.
Bereich Unterklassen
Sie sind aufgefordert, eigene Felder, die das tun, was Sie wollen. Feldklassen haben eine Hook-Funktion pre_validate, die einen ankommenden Wert zu nehmen und kann sie verwandeln aber sie wollen. Beachten Sie, dass dies nur funktioniert, wenn die Felder tatsächlich vorhanden sind; so etwas wie ein auto_now_add auf einem Datetimefield zu bekommen, werden Sie wollen, machen es erforderlich Bereits auf pre_validate drehen Keiner in datetime.datetime.now ()
Anforderungen .
- Python
Kommentare nicht gefunden