[PYTHON]

Eine Problemumgehung finden Sie oben in Tabelle 6.1. Standardfilter-Aliase und -Bestellung. Führen Sie die gewünschte Filterung durch, bevor das Ziel der Anforderung festgelegt wird. Verwenden wir MongoDBs ODM mit Java, Spring-Security und Spring Python. Vorheriges Buch Dieser Artikel ist eine Fortsetzung des Artikels Erste Schritte mit MongoDB mit Python. Es ist so strukturiert, dass Sie den Inhalt verstehen können, ohne den vorherigen Artikel zu lesen. Wenn Sie an MongoDB interessiert sind, würden wir uns freuen, wenn Sie bis zum Ende bei uns bleiben könnten.

Umgebung

MongoDB In diesem Artikel erstellen wir die Umgebung mit Docker. Wenn Sie MongoDB direkt lokal installieren möchten, lesen Sie bitte den vorherigen Artikel. : point_up_tone1:

docker-compose.yml


version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017      
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

Starten Sie den Container.

docker-compose up -d mongo mongo-express

Wenn Sie auf Mongo Express zugreifen und es anzeigen können, ist die Erstellung der MongoDB-Umgebung abgeschlossen. キャプチャ.PNG

Python

Die Python-Seite verwendet eine Bibliothek namens "Mongoengine".

pip install mongoengine

Versuchen Sie eine Verbindung herzustellen. Versuchen Sie, eine Verbindung zur standardmäßig enthaltenen lokalen Datenbank herzustellen.

test.py


from mongoengine import connect

connect(db='local',
        username="root",
        password="example",
        host='192.168.99.100',
        port=27017,
        authentication_mechanism='SCRAM-SHA-1',
        authentication_source='admin'
        )

Führen Sie es aus, und wenn keine Fehler vorliegen, ist es erfolgreich. Weitere Verbindungsmethoden finden Sie hier: point_right_tone1: Erste Schritte mit MongoDB in Python

MongoDB ODM

Was ist ODM, buchstäblich Objektdokumentzuordnung. Ordnen Sie Objekte einer Dokumentendatenbank wie MongoDB zu. Der Vorteil der Verwendung besteht darin, dass Sie die Struktur der Daten binden können.

Sehen wir uns ein Beispiel an

test.py



from mongoengine import connect, Document, EmbeddedDocument, \
    StringField, IntField, DateTimeField, ListField, EmbeddedDocumentField
from datetime import datetime

connect(db='company',
        username="root",
        password="example",
        host='192.168.99.100',
        port=27017,
        authentication_mechanism='SCRAM-SHA-1',
        authentication_source='admin'
        )


class Employee(EmbeddedDocument):
    """
Mitarbeiterdetails
    """
    name = StringField(required=True)
    age = IntField(required=False)


SCALE_CHOICES = (
    ("venture", "Wagen"),
    ("major", "Haupt")
)


class Company(Document):
    """
Unternehmensmodell
    """
    name = StringField(required=True, max_length=32)
    scale = StringField(required=True, choices=SCALE_CHOICES)
    created_at = DateTimeField(default=datetime.now())
    members = ListField(EmbeddedDocumentField(Employee))

Wenn Sie jemals ein Modell mit "Django" oder "sqlalchemy" definiert haben, ist dies eine vertraute Konfiguration. Lassen Sie uns die Daten mit dem tatsächlich definierten Modell in MongoDB einfügen. Fügen Sie den folgenden Code zu test.py hinzu und führen Sie ihn aus. : point_up_tone1: Sie müssen keine Testdatenbank im Voraus erstellen.

test.py



class TestMongoEngine:
    def add_one(self):
       c_obj = Company(
           name="Berühmtes Unternehmen",
           scale="venture",
       )
       c_obj.save()
       return c_obj


if __name__ == "__main__":
        t = TestMongoEngine()
        t.add_one()

In Mongo Express können Sie sehen, dass die Daten eingegeben wurden.

キャプチャ.PNG

EmbeddedDocumentField ist nützlich, wenn Sie mehr Struktur innerhalb des Modells definieren möchten, also werde ich es verwenden.

Ändern Sie den zu test.py hinzugefügten Code wie folgt und führen Sie ihn erneut aus.

test.py



class TestMongoEngine:
    def add_one(self):
       member1 = Employee(
               name="memberA",
               age=40,
       )
       member2 = Employee(
               name="memberB",
               age=35,
       )
       c_obj = Company(
           name="Berühmtes Unternehmen A.",
           scale="venture",
           members=[member1, member2]
       )
       c_obj.save()
       return c_obj


if __name__ == "__main__":
        t = TestMongoEngine()
        t.add_one()

Überprüfen Sie das Ergebnis von Mongo Express. キャプチャ.PNG

CRUD mit ODM

C (Erstellen) Das Beispiel zum Hinzufügen eines neuen wurde im ersten Beispiel vorgestellt. Wir beginnen also mit dem Lesen der Daten.

Lesen von R-Daten (Abrufen)

Einmal lesen

Lesen Sie eine Daten aus der neu hinzugefügten Datenbank.

test.py


...
class TestMongoEngine: 
    def get_one(self):
        return Company.objects.first()

if __name__ == "__main__":
        t = TestMongoEngine()
        rest = t.get_one()
        print(rest.id)
        print(rest.name)

Ergebnis


5e7ed47419d1a75baa2bc3f3
Berühmtes Unternehmen

Lese alles

test.py


...
class TestMongoEngine:
    def get_more(self):
        return Company.objects.all()

if __name__ == "__main__":
        t = TestMongoEngine()
        rest = t.get_more()
        print(rest)

Ergebnis

[<Company: Company object>, <Company: Company object>, <Company: Company object>]

Gelesen durch ID-Suche

test.py


...
class TestMongoEngine:
      def get_from_oid(self, oid):
          return Company.objects.filter(pk=oid).first()

if __name__ == "__main__":
        t = TestMongoEngine()
        rest = t.get_from_oid("5e7ed47419d1a75baa2bc3f3")
        print(rest.id)
        print(rest.name)

Ergebnis

5e7ed47419d1a75baa2bc3f3
Berühmtes Unternehmen

Ergänzung

Wenn Sie die Reihenfolge beim Lesen von Daten ändern möchten, fügen Sie dem Unternehmensmodell "meta" hinzu.

test.py


class Company(Document):
    """
Unternehmensmodell
    """
    name = StringField(required=True, max_length=32)
    scale = StringField(required=True, choices=SCALE_CHOICES)
    created_at = DateTimeField(default=datetime.now())
    members = ListField(EmbeddedDocumentField(Employee))
    meta = {
        'ordering': ['-created_at']  #Meta hinzufügen
    }

Dokumente

Daten aktualisieren

Einzelne Datenänderung

test.py


...
class TestMongoEngine:
    def update(self):
        rest = Company.objects.filter(name="Berühmtes Unternehmen").update_one(name="Gewöhnliches Unterfangen")
        return rest

if __name__ == "__main__":
        t = TestMongoEngine()
        rests = t.update()

Nach der Ausführung können Sie sehen, dass die Daten von Mongo Express geändert wurden. キャプチャ.PNG

Mehrere Datenkorrekturen

Es gibt zwei Datensätze in MongoDB, bei denen "Name" das berühmte Unternehmen A ist. Wir werden sie reparieren. キャプチャ.PNG

test.py


class TestMongoEngine:
    def update(self):
        rest = Company.objects.filter(name="Berühmtes Unternehmen A.").update(name="Berühmtes Unternehmen B.")
        return rest

if __name__ == "__main__":
        t = TestMongoEngine()
        rests = t.update()
        print(rests)

Ausführungsergebnis

2

Sie können auch bestätigen, dass die Daten von Mongo Express korrigiert wurden. キャプチャ.PNG

Daten löschen

Löschen einzelner Daten

test.py


class TestMongoEngine:
    def delete(self):
        rest = Company.objects.filter(name="Gewöhnliches Unterfangen").first().delete()
        return rest

if __name__ == "__main__":
        t = TestMongoEngine()
        rests = t.delete()
        print(rests)

Nach der Ausführung

キャプチャ.PNG

Mehrere Daten löschen

Löschen Sie die beiden Daten, deren "Name" das berühmte Unternehmen B ist.

test.py


...
class TestMongoEngine:
    def delete(self):
        rest = Company.objects.filter(name="Berühmtes Unternehmen B.").delete()
        return rest

if __name__ == "__main__":
        t = TestMongoEngine()
        rests = t.delete()
        print(rests)

Ausführungsergebnis

2

Als ich in Mongo Express nachgesehen habe, wurden alle Daten in CompanyDB gelöscht.

Nachtrag

MongoEngine-Dokumentation Das nächste Mal möchte ich einen Artikel über das Erstellen eines Webdienstes mit Flask und MongoDB schreiben.

Recommended Posts