[PYTHON] Grundlagen zum Berühren von MongoDB mit MongoEngine

Dieser Artikel ist der dritte Tag von MongoDB Adventskalender 2013.

Was ist MongoEngine?

MongoEngine ist eine Bibliothek, mit der Sie Dokumente für MongoDB-ähnliche Objekte mit ** ODM == Object Document Mapper ** verwalten können. Es abstrahiert die Definition, den Abruf und die Speicherung von Dokumentschemata.

Die Verwendung ist dem ORM von Django sehr ähnlich, und Django-Benutzer können MongoDB verwenden, ohne MongoDB-spezifische Abfragen zu lernen. vielleicht.

Der Versuch, etwas gründlich zu tun, erfordert jedoch Kenntnisse in MongoDB.

Was die MongoEngine kann und was nicht

Was du tun kannst

Dinge, die Sie nicht tun können oder die problematisch sind

Lass uns anfassen

Installation

Da es in pypi registriert ist, installieren Sie es mit pip.

$ pip install mongoengine

Verbindungszieleinstellungen

Verwenden Sie mongoengine.connect, um eine Verbindung zu MongoDB herzustellen. So stellen Sie eine Verbindung zu einer Datenbank mit dem Namen * mongotest * her:

from mongoengine import connect

connect('mongotest')

Fügen Sie Argumente hinzu, wenn Sie einen Host oder Port angeben.

connect('mongotest', host='192.168.0.10', port=999)

Erstellen Sie eine Dokumentklasse

Definieren Sie eine Unterklasse, die von der Klasse mongoengine.document.Document erbt. Weisen Sie jedem Feld mongoengine.fields. * Zu. Feldklassen werden mit Namen definiert, die Python-Objektnamen ähnlich sind, z. B. IntField und StringField.

documents.py


from mongoengine.document import Document
from mongoengine import fields

class Athlete(Document):
    name = fields.StringField()
    age = fields.IntField()

    def __unicode__(self):
        return self.name

Das Gute an MongoDB ist, dass es schemenlos ist, aber ich persönlich finde es einfacher, ein Schema für die Dokumentklasse == zu erstellen und zu betreiben. Abgesehen davon kann eine Sammlung mit mehreren Dokumentklassen arbeiten, sodass die Vorteile einer schemenlosen Ausführung nicht beeinträchtigt werden.

Dokumentation hinzufügen

Instanziieren Sie die Athletenklasse und rufen Sie die Methode "save ()" auf.

from documents import Athlete

#Fügen Sie Taro Yamada und Hanako Yamada hinzu
athlete = Athlete(name=u"taro yamada", age=30)
athlete.save()
athlete = Athlete(name=u"hanako yamada", age=28)
athlete.save()

Blick auf den Mongo-Befehl ...

$ mongo mongotest
MongoDB shell version: 2.4.6
connecting to: mongotest

> show dbs
local	0.078125GB
mongotest	0.203125GB

Die Datenbank wird automatisch erstellt. Die Sammlung ist

> show collections
athlete
system.indexes

> db.athlete.find()
{ "_id" : ObjectId("529db366bdbf568299123013"), "name" : "taro yamada", "age" : 30 }
{ "_id" : ObjectId("529db458bdbf568299123014"), "name" : "hanako yamada", "age" : 28 }

Und so weiter werden die Dokumente in der Athleten-Sammlung gespeichert.

Dokumentation abrufen

Die Dokumentenerfassung erfolgt ebenfalls in der Athletenklasse. Lassen Sie uns alle Datensätze mit der Methode all () über die Eigenschaft properties abrufen (die Django-Benutzern bekannt ist).

>>> Athlete.objects.all()
[<Athlete: taro yamada>, <Athlete: hanako yamada>]

Verwenden Sie die Methode filter (), um eine Abrufbedingung hinzuzufügen.

>>> Athlete.objects.filter(age=28)
[<Athlete: hanako yamada>]

Wenn Sie nur ein Dokument abrufen möchten, können Sie die Methode get () verwenden.

>>> Athlete.objects.get(age=28)
<Athlete: hanako yamada>

Eine Ausnahme wird ausgelöst, wenn das Dokument bei Ausführung der Methode get () nicht vorhanden ist.

>>> Athlete.objects.get(name=u"inoki")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/key/.virtualenvs/mongoenginetest/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 186, in get
    raise queryset._document.DoesNotExist(msg)
documents.DoesNotExist: Athlete matching query does not exist.

Sie können auch die Methode count () verwenden, um die Anzahl der Dokumente zu zählen.

>>> Athlete.objects.all().count()
2

Dokumentaktualisierung

Führen Sie zum Aktualisieren des Dokuments die Methode save () der Instanz aus. Wenn kein Dokument vorhanden ist, wird es hinzugefügt und, falls vorhanden, aktualisiert.

>>> athlete = Athlete.objects.get(name=u"taro yamada")
>>> athlete.age = 50
>>> athlete.save()
<Athlete: taro yamada>
>>> athlete.age
50

Dokument löschen

Setzen Sie die Methode delete () für eine Instanz der Athlete-Klasse ab.

>>> hanako = Athlete.objects.get(age=28)
>>> hanako.delete()
>>> Athlete.objects.all()
[<Athlete: taro yamada>]

Hanako wurde entfernt :)

Wenn Sie versehentlich die Methode "delete ()" nach der Methode "all ()" verketten, verschwindet alles (auch wenn Sie "filter ()" verwenden).

>>> Athlete.objects.all().delete()
>>> Athlete.objects.all()
[]

Taro wurde auch entfernt :)

Recommended Posts

Grundlagen zum Berühren von MongoDB mit MongoEngine
Erste Schritte mit Python Grundlagen von Python
Grundlagen der binärisierten Bildverarbeitung durch Python
Python-Grundlagen ①
Grundlagen von Python ①
MongoDB-Grundlagen: Erste Schritte mit CRUD mit JAVA
Grundlagen der Python-Scraping-Grundlagen
Eindrücke, Django zu berühren
MongoDB-Grundlagen: Transaktionsverarbeitung
# 4 [Python] Grundlagen der Funktionen
Grundlagen von Netzwerkprogrammen?
Die Gründung der Perceptron-Stiftung
[Grundlagen der modernen mathematischen Statistik mit Python] Kapitel 1: Wahrscheinlichkeit
Grundlagen der Regressionsanalyse
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python
Grundlagen von Python: Ausgabe
Grundlagen des maschinellen Lernens (Denkmal)
Bewegungsgleichung mit Sympy
[Hinweis] Betreiben Sie MongoDB mit Python
Manipulieren von mongoDB mit Python-Teil 6: aggreg-
Python: Grundlagen der Verwendung von Scikit-Learn ①
Lernen mit dem Lehrer 1 Grundlagen des Lernens mit dem Lehrer (Klassifizierung)
Erinnerungen an den Kampf mit Selen
XPath-Grundlagen (1) - Grundkonzept von XPath
Vorhersage des Nikkei-Durchschnitts mit Pytorch
Python x GIS-Grundlagen (1)
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
Serie, in der Amateur-Infrastrukturingenieure Django mit Docker berühren touch: Django admin
Lösen von Rucksackproblemen mit den OP-Tools von Google - Üben der Grundlagen von Kombinationsoptimierungsproblemen
[Grundlagen der modernen mathematischen Statistik mit Python] Kapitel 3: Typische Wahrscheinlichkeitsverteilung