Imagem de destaque do blog justcode.com.br.

Como utilizar o MongoEngine com o banco de dados MongoDB

Hoje veremos como utilizar o ODM MongoEngine com o banco de dados MongoDB através do conector pymongo.

MongoEngine

MongoEngine é um mapeador de objeto de documento (ODM) para MongoDB em Python.

Ele fornece uma maneira mais orientada a objetos de interagir com bancos de dados MongoDB em comparação com a API padrão fornecida pelo driver pymongo.

O MongoEngine permite que você defina modelos de dados como classes Python, onde cada instância da classe representa um documento no banco de dados MongoDB.

A sua instalação pode ser feita via pip::

pip install mongoengine

Pymongo

O pymongo é uma biblioteca Python oficial que permite interagir com o MongoDB, um banco de dados NoSQL de código aberto.

Ele fornece uma API simples e intuitiva para trabalhar com o MongoDB, permitindo que os desenvolvedores criem, atualizem, consultem e excluam dados de maneira eficiente.

O pymongo pode ser instalado usando o pip, que é o gerenciador de pacotes padrão do Python:

pip install pymongo

Depois de instalado, você pode importar o conector em seus scripts Python e usá-lo para se conectar a um servidor Redis e executar operações de banco de dados.


Contêiner

Para testar o código de exemplo foi utilizando o seguinte arquivo docker-compose.yaml:

services:
  db:
    image: mongo:latest
    container_name: MongoDB
    restart: on-failure
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: dbuser
      MONGO_INITDB_ROOT_PASSWORD: 123456
      MONGO_INITDB_DATABASE: database_name

📝 Contêiner testado com Docker e com o Podman.


Exemplo de CRUD

# -*- coding: utf-8 -*-
"""CRUD - Python - MongoEngine - MongoDB."""

from mongoengine import Document, IntField, StringField, connect

db = connect(
    username='dbuser',
    password='123456',
    host='localhost',
    port=27017,
    db='database_name',
    authentication_source='admin',
)

# username = 'dbuser'
# password = '123456'
# host = 'localhost'
# port = 27017
# db = 'database_name'
# authentication_source = 'admin'
# URI = f'mongodb://{username}:{password}@{host}:{port}/{db}?authSource={authentication_source}'
# db = connect(host=URI)


class CollectionName(Document):
    name = StringField(max_length=32)
    age = IntField(min_value=0, max_value=150)
    meta = {
        'collection': 'collection_name'
    }

    def __str__(self):
        return f'name={self.name}, age={self.age}'


if __name__ == "__main__":
    CollectionName.drop_collection()

    # Create.
    print('[!] Create [!]')
    user = CollectionName(name='renato', age=35).save()
    obj_id = user.id

    # Bulk create.
    CollectionName.objects.insert(
        [
            CollectionName(name='Helena', age=20),
            CollectionName(name='João', age=50),
        ],
    )

    # Read.
    print('\n[!] Read [!]')
    print(CollectionName.objects)
    print(CollectionName.objects(id=obj_id))
    print(CollectionName.objects(age__gt=20))

    # Update.
    print('\n[!] Update [!]')
    print(CollectionName.objects(id=obj_id))
    CollectionName.objects(id=obj_id).update_one(
        name='joão',
    )
    print(CollectionName.objects(id=obj_id))

    # Delete.
    print('\n[!] Delete [!]')
    print(CollectionName.objects(id=obj_id))

    CollectionName.objects(id=obj_id).first().delete()
    print(CollectionName.objects(id=obj_id))

    db.close()

Conclusão

O MongoDB é uma poderosa ferramenta de banco de dados NoSQL que oferece flexibilidade, escalabilidade e desempenho para uma variedade de aplicações.

Compreender os conceitos básicos, como documentos, coleções, consultas e índices, pode ajudá-lo a utilizar o MongoDB de forma eficaz em seus projetos de desenvolvimento.