BLOGAnnounced at MongoDB.local NYC 2024: A recap of all announcements and updates — Learn more >

Como usar Python com MongoDB

Use o Atlas para acompanhar
Conecte-se gratuitamente já

Python, a principal linguagem de programação na ciência de dados, e o MongoDB, com seu esquema flexível e dinâmico, são ótimos juntos para criar aplicativos web modernos, APIs JSON e processadores de dados, entre muitos outros recursos. O MongoDB tem um driver Python nativo e uma equipe de engenheiros dedicada ao funcionamento integrado entre o MongoDB e a Python.

Sumário
O que é Python?

Python, o canivete suíço das linguagens tipadas dinamicamente atuais, tem suporte abrangente para tarefas comuns de manipulação e processamento de dados, o que a torna uma das melhores linguagens de programação para ciência de dados e desenvolvimento Web. O dicionário nativo do Python e os tipos de dados de lista fazem com que ele fique atrás apenas do JavaScript na manipulação de documentos JSON, e seja adequado para trabalhar com BSON. PyMongo, a biblioteca de driver padrão do MongoDB para Python, é fácil de usar e oferece uma API intuitiva para acessar bancos de dados, coleções e documentos.

Os objetos recuperados do MongoDB por meio do PyMongo são compatíveis com dicionários e listas, de modo que podemos facilmente manipulá-los, iterá-los e imprimi-los.

Como o MongoDB armazena dados

O MongoDB armazena dados em documentos do tipo JSON:

Dicionários Python se parecem com:

Continue lendo para obter uma visão geral de como aproveitar todo o potencial desta poderosa combinação de recursos.

Pré-requisitos

Baixe e instale o Python em sua máquina. Para confirmar se a instalação está correta, digite python --version na linha de comando do seu terminal. Você verá algo semelhante a:

Você pode seguir os exemplos do python MongoDB neste tutorial mesmo se você for iniciante no Python.

Recomendamos configurar um cluster de nível gratuito do MongoDB Atlas para este tutorial.
Crie seu cluster de nível gratuito agora
Saiba mais sobre o Atlas
Conectar o Python e o MongoDB Atlas

O PyMongo tem um conjunto de pacotes para a interação entre o Python e o MongoDB. Para o tutorial a seguir, comece criando um ambiente virtual, e ative-o.

Agora que você está em seu ambiente virtual, instale o PyMongo. Em seu terminal, digite:

Agora, podemos usar o PyMongo como uma biblioteca Python MongoDB em nosso código com uma instrução de importação.

Como criar um banco de dados do MongoDB no Python

A primeira etapa para conectar o Python ao Atlas é criar um cluster. Siga as instruções na documentação para aprender a criar e configurar seu cluster.

Em seguida, crie um arquivo chamado pymongo_get_database.py em qualquer pasta para escrever o código do PyMongo. Você pode usar qualquer editor de texto básico, como o Visual Studio Code.

Para criar o cliente MongoDB, adicione o seguinte:

Para criar um MongoClient, você precisará de uma string de conexão para seu banco de dados. Se você estiver usando o Atlas, siga as etapas da documentação para obter essa string de conexão. Use connection_string para criar o mongoclient e obter a conexão do banco de dados MongoDB. Altere o nome de usuário, senha e nome do cluster.

Neste tutorial python mongodb, criaremos uma lista de compras e adicionaremos alguns itens. Para tal, criamos um banco de dados user_shopping_list.

O MongoDB não cria um banco de dados até que você tenha collections e documentos nele. Portanto, vamos criar uma collection agora.

Como criar uma collection no Python

Para criar uma collection, passe o nome da collection para o banco de dados. Em um novo arquivo chamado pymongo_test_insert.py, adicione o seguinte código.

Isso cria uma collection chamada user_1_items no banco de dados user_shopping_list.

Como inserir documentos no Python

Para inserir vários documentos de uma só vez, use o método insert_many() do pymongo.

Vamos inserir um terceiro documento sem especificar o campo _id. Desta vez, vamos adicionar um campo do tipo de dados 'data'. Para adicionar a data usando PyMongo, use o pacote Python dateutil.

Primeiro, instale o pacote usando o seguinte comando:

Adicione o seguinte ao pymongo_test_insert.py:

Usamos o método insert_one() para inserir um único documento.

Abra a linha de comando e navegue até a pasta onde você salvou pymongo_test_insert.py.

Execute o arquivo usando o comando:

Vamos conectar à interface de usuário do MongoDB Atlas e ver o que temos até agora.

Faça login no seu Atlas cluster e clique no botão collections.

No lado esquerdo, você verá o banco de dados e o nome da collection que criamos. Ao clicar no nome da collection, você também verá os dados:

visualização do banco de dados e nome da collection
visualização de dados ao clicar

O campo _id é do tipo ObjectId por padrão. Se não especificarmos o campo _id, o MongoDB o gerará. Nem todos os campos presentes em um documento estão presentes em outros. Mas o MongoDB não impede você de inserir dados — essa é a essência de um banco de dados sem esquema.

Se inserirmos item_3 novamente, o MongoDB inserirá um novo documento, com um novo valor de _id. No entanto, as duas primeiras inserções gerarão um erro devido ao campo _id, o identificador exclusivo.

Como fazer queries no Python

Vamos visualizar todos os documentos juntos usando find(). Para tal, criaremos um arquivo separado pymongo_test_query.py:

para o item em item_details: # Isso não gera um resultado muito legível print(item)

python pymongotestquery.py ```

Obtemos a lista de objeto de dicionário como resultado:

lista de dicionário

Podemos visualizar os dados, mas o formato não é muito legível. Portanto, vamos imprimir os nomes dos itens e suas categorias ao substituir a linha print pelo seguinte:

Embora o MongoDB consiga obter todos os dados, vemos um 'KeyError' Python no terceiro documento.

Python KeyError

Para gerenciar erros de dados ausentes no Python, use pandas.DataFrames. DataFrames são estruturas de dados 2D usadas para tarefas de processamento de dados. O método find() pymongo retorna objetos de dicionário que podem ser convertidos em um dataframe em uma única linha de código.

Instale a biblioteca pandas como:

Agora importe a biblioteca pandas adicionando a seguinte linha no topo do arquivo:

E substitua o código no loop pelo seguinte para gerenciar KeyError em uma etapa:

O os erros são substituídos por NaN e NaT para os valores ausentes.

NaN e NaT para os valores ausentes.
Como criar índices no Python MongoDB

O número de documentos e collections em um banco de dados do mundo real aumenta constantemente. Em uma collection grande, pode levar bastante tempo para pesquisar documentos específicos, por exemplo, documentos com “farinha de trigo” entre seus ingredientes. Os índices tornam a pesquisa de banco de dados mais rápida e eficiente e reduzem o custo de consultar em operações de classificação, contagem e correspondência.

O MongoDB define índices em nível de collection.

Para deixar o índice mais prático, adicione mais documentos à nossa collection. Use o método insert_many() para inserir vários documentos de uma só vez. Para obter documentos de amostra, copie o código do Github e execute python pymongo_test_insert_more_items.py em seu terminal.

Por exemplo, queremos os itens que pertencem à categoria 'comida':

Para executar a consulta acima, o MongoDB precisa verificar todos os documentos. Para verificar isso, baixe o Compass. Conecte-se ao seu cluster usando a string de conexão. Abra a collection e acesse a guia "Explicar plano". Em 'filtro', forneça os critérios acima e veja os resultados:

Consultar resultados sem índice

Observe que a consulta verifica 14 documentos para obter cinco resultados.

Vamos criar um único índice no campo 'categoria'. Em um novo arquivo chamado pymongo_index.py, adicione o seguinte código.

Explique o mesmo filtro novamente na UI do Compass:

Consultar resultados com índice

Desta vez, somente cinco documentos são verificados por causa do índice de categoria. Não há uma diferença significativa no tempo de execução devido ao número reduzido de documentos. Entretanto, há uma grande redução no número de documentos verificados para a consulta. Os índices também ajudam na otimização de desempenho para agregações. As agregações estão fora do escopo deste tutorial, mas veja aqui uma visão geral.

Conclusão

Neste tutorial Python MongoDB, aprendemos os fundamentos do PyMongo e executamos operações básicas de banco de dados. Para aprofundar-se no assunto, tente usar PyMongo para executar operações CRUD com dados de negócios. Se você não trabalhou junto com este tutorial, comece agora instalando o MongoDB Atlas gratuitamente. Há também um curso disponível sobre este tópico específico na MongoDB University.

Pronto para começar?

Crie um novo cluster ou migre para o MongoDB Atlas com tempo zero de inatividade e conecte-se ao Python hoje mesmo.
Experimente agora mesmo

Perguntas frequentes

Como você conecta o MongoDB ao Python?

Há três maneiras de conectar o MongoDB ao Python:

  • PyMongo
    • O driver nativo para conectar o MongoDB e o Python. O PyMongo tem todas as bibliotecas para realizar operações de banco de dados a partir do código Python. Como o PyMongo é um driver de baixo nível, ele é rápido e intuitivo e fornece mais controle.
  • MongoEngine
    • O MongoEngine é um mapeador de objetos de documento. Podemos definir um esquema que mapeia objetos de aplicativos e dados de documentos.
  • Djongo
    • Usamos o Djongo para aplicações web python usando o framework Django. Ele converte queries SQL existentes em documentos de query mongodb.

Saiba mais sobre como usar o MongoEngine e o Djongo.

Qual banco de dados é melhor para Python?

O Python funciona bem com diferentes bancos de dados. A escolha depende dos requisitos de seu projeto. O MongoDB, devido ao esquema flexível e ao mapeamento semelhante aos objetos nativos do Python, é uma ótima opção para aplicativos Python. Isso torna o Python e o MongoDB uma ótima combinação para o trabalho de desenvolvimento web.

Para obter mais informações, leia Bancos de dados com e sem SQL. Há também alguns bancos de dados nativos em python, mas eles não são populares e têm recursos muito limitados.

O MongoDB é adequado para o Python?

O MongoDB armazena dados em documentos flexíveis e sem esquema, parecidos com o JSON. O Python tem bibliotecas avançadas que processam diretamente os formatos de dados JSON e BSON. O Python se integra bem ao MongoDB por meio de drivers como PyMongo, MongoEngine etc.

Isso torna o MongoDB adequado para o Python, pois elimina a rigidez do esquema do banco de dados.

Como o Python armazena dados no MongoDB?

O Python armazena dados no MongoDB por meio de bibliotecas como PyMongo e MongoEngine. Para aplicativos web que usam o framework Django, podemos usar o Djongo.

  • PyMongo: é o driver python nativo para o banco de dados MongoDB. Como é um driver de baixo nível, ele é mais rápido e também é a maneira preferida de conectar o Python e o MongoDB.
  • MongoEngine: permite criar um esquema (sim, para um banco de dados sem esquema). O MongoEngine segue a abordagem ODM para mapear classes de aplicativos e documentos de banco de dados.
  • Djongo: é um transpilador de SQL. Você pode migrar projetos SQL existentes para o MongoDB sem muitas alterações no código.

Saiba mais sobre como usar o MongoEngine e o Djongo.

Como se faz para usar o MongoDB com Python?
É possível conectar o MongoDB com Python usando o PyMongo, o driver Python nativo para MongoDB. Ele tem uma sintaxe semelhante à do MongoShell, então é fácil fazer a correlação e usar o método correto. Por exemplo, insertMany() no MongoShell corresponde a insert_many() no PyMongo. Também podemos conectar Python e MongoDB usando MongoEngine e Djongo. No entanto, a abordagem preferida é usar o PyMongo, pois ele é mais rápido e oferece mais controle por ser um driver de baixo nível. Para saber mais sobre o PyMongo, consulte nossa documentação em PyMongo.
Como se faz para obter dados do MongoDB usando Python?

O método mais eficiente e prático de se conectar ao MongoDB no Python é usando o PyMongo, o driver Python nativo para MongoDB. Para estabelecer a conexão, usamos o comando pymongo.MongoClient() com connection_string como argumento. Em seguida, podemos usar o método find() para obter os documentos necessários. Exemplo:

import PyMongo

# conecte-se ao mongodb pelo python usando o pymongo
client = PyMongo.MongoClient(CONNECTION_STRING)
# abra o banco de dados
dbname = client['user_shopping_list']
# obtenha a collection
collection_name = dbname["item_details"]
# obtenha os dados da collection
item_details = collection_name.find()import pymongo

# conecte-se ao mongodb pelo python usando pymongo
client = PyMongo.MongoClient(CONNECTION_STRING)
# abra o banco de dados
dbname = client['user_shopping_list']
# obtenha a collection
collection_name = dbname["item_details"]
# obtenha os dados da collection
item_details = collection_name.find()
Como se faz para inserir dados no MongoDB usando Python?

Para inserir dados, conecte o MongoDB e o Python usando o PyMongo, o driver Python nativo para MongoDB. Depois da conexão, é possível usar os métodos do PyMongo, como insert_one() e insert_many(). Exemplo:

# Obtenha o mongoclient
client = PyMongo.MongoClient(CONNECTION_STRING)

# Obtenha/crie o banco de dados
dbname = client['user_shopping_list']

# Obtenha/crie a collection 
collection_name = dbname["item_details"]

# Crie o documento
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Insira uma linha
collection_name.insert_one(item_1)# Obtenha o mongoclient
client = PyMongo.MongoClient(CONNECTION_STRING)

# Obtenha/crie o banco de dados
dbname = client['user_shopping_list']

# Obtenha/crie a collection 
collection_name = dbname["item_details"]

# Crie o documento 
 item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# Insira uma linha 
 collection_name.insert_one(item_1)
Como se faz para criar um banco de dados no MongoDB usando Python?

Com o driver PyMongo, é possível criar um banco de dados do MongoDB usando código Python. Exemplo:

import pymongo

# Obtenha o mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Obter/Criar o banco de dados
dbname = client['user_shopping_list']import pymongo

# Obtenha o mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# Obter/Criar o banco de dados
dbname = client['user_shopping_list']
Qual é a diferença entre bancos de dados SQL e bancos de dados NoSQL?

Os bancos de dados SQL também são chamados de relational databases, e os bancos de dados NoSQL ("não apenas SQL" ou "não apenas SQL") também são chamados de non-relational databases. Os relational databases são assim denominados porque se baseiam no "modelo de dados relacional" da matemática.

Os bancos de dados SQL armazenam dados na forma de tabelas com linhas e colunas fixas. Existem vários tipos de bancos de dados NoSQL, como:

  1. Tipo de documento: documentos JSON

  2. Valor-chave: pares chave-valor

  3. Coluna larga: o armazenamento de dados de coluna larga tem tabelas com linhas e colunas dinâmicas

Exemplos de bancos de dados baseados em SQL: MySQL, Microsoft SQL Server, PostgreSQL e SQLite. Exemplos de banco de dados NoSQL: MongoDB, CouchDB, Redis e DynamoDB.

Para obter uma comparação mais detalhada, consulte Bancos de dados com e sem SQL.