Menu Docs
Página inicial do Docs
/ / /
Driver Pymongo
/

Escolha um destino de conexão

Nesta página

  • Visão geral
  • Atlas
  • Implantações locais
  • Conjuntos de réplicas
  • Inicialização
  • Descoberta de serviço DNS
  • Solução de problemas
  • Servidor MongoDB relata versão X de fio, PyMongo requer Y
  • Reconexão automática
  • Tempo limite ao acessar o MongoDB do PyMongo com tunelamento
  • Documentação da API

Neste guia, você pode aprender como usar uma string de conexão e objeto MongoClient para conectar a diferentes tipos de sistemas MongoDB.

Para se conectar a uma MongoDB deployment no Atlas, inclua os seguintes elementos em sua connection string:

  • URL do seu cluster Atlas

  • Nome de usuário do MongoDB

  • Senha do MongoDB

Em seguida, passe sua connection string para o construtor MongoClient .

Dica

Siga oguia de conexão do driver do Atlas para recuperar sua connection string.

Ao se conectar ao Atlas, recomendamos usar a opção de cliente Stable API para evitar alterações significativas quando o Atlas atualizar para uma nova versão do MongoDB Server. Para saber mais sobre o recurso de Stable API , consulte apágina deStable API .

O código a seguir mostra como usar o PyMongo para se conectar a um cluster Atlas. O código também usa a opção server_api para especificar uma versão de stable API .

from pymongo import MongoClient
from pymongo.server_api import ServerApi
# Replace the placeholder with your Atlas connection string
uri = "<connection string>"
# Create a MongoClient with a MongoClientOptions object to set the Stable API version
client = MongoClient(uri, server_api=ServerApi(
version='1', strict=True, deprecation_errors=True))
try:
# Connect the client to the server (optional starting in v4.7)
client.connect()
# Send a ping to confirm a successful connection
client.admin.command({'ping': 1})
print("Pinged your deployment. You successfully connected to MongoDB!")
finally:
# Ensures that the client will close when you finish/error
client.close()

Para se conectar a uma implantação local do MongoDB, use localhost como nome do host. Por padrão, o processo mongod é executado na porta 27017, embora você possa personalizar isso para seu sistema.

O seguinte código mostra como usar o PyMongo para se conectar a um MongoDB deployment local:

from pymongo import MongoClient
uri = "mongodb://localhost:27017/"
client = MongoClient(uri)

Para se conectar a um conjunto de réplicas, especifique o nome de host (ou endereço IP) e o número de porta dos membros do conjunto de réplicas em sua connection string.

O código a seguir mostra como usar o PyMongo para se conectar a um conjunto de réplicas que contém três hosts:

from pymongo import MongoClient
client = MongoClient("mongodb://host1:27017,host2:27017,host3:27017")

Se você não conseguir fornecer uma lista completa de hosts no conjunto de réplicas, poderá especificar um ou mais hosts no conjunto de réplicas e instruir o PyMongo a executar a descoberta automática para encontrar os outros. Para instruir o driver a realizar a descoberta automática, execute uma das seguintes ações:

  • Especifique o nome do conjunto de réplica como o valor do parâmetro replicaSet.

  • Especifique false como o valor do parâmetro directConnection.

  • Especifique mais de um host no conjunto de réplica.

No exemplo a seguir, o driver usa um URI de conexão de exemplo para se conectar ao conjunto de réplicas do MongoDB sampleRS, que está sendo executado na porta 27017 de três hosts diferentes, incluindo host1:

from pymongo import MongoClient
uri = "mongodb://host1:27017/?replicaSet=sampleRS"
client = MongoClient(uri)

O PyMongo equilibra uniformemente as operações entre sistemas acessíveis dentro do valor localThresholdMS do cliente. Para saber mais sobre como o PyMongo equilibra a carga de operações em vários sistemas do MongoDB , consulte o guia Personalizar seleção de servidor.

Observação

O construtor MongoClient não está bloqueando. Quando você se conecta a um conjunto de réplicas, o construtor retorna imediatamente enquanto o cliente usa threads em segundo plano para se conectar ao conjunto de réplicas.

Se você construir um MongoClient e imprimir imediatamente a representação de string de seu atributo nodes , a lista poderá estar vazia enquanto o cliente se conecta aos membros do conjunto de réplicas.

Para inicializar um conjunto de réplicas, você deve se conectar diretamente a um único membro. Para fazer isso, defina a opção de conexão directConnection como True. Você pode fazer isso de duas maneiras: passando um argumento para o construtor MongoClient ou por meio de um parâmetro em sua connection string.

from pymongo import MongoClient
client = MongoClient("mongodb://<hostname>:<port>",
directConnection=True)
from pymongo import MongoClient
uri = ("mongodb://<hostname>:<port>/?"
"directConnection=true")
client = MongoClient(uri)

Para usar a descoberta de serviços DNS para procurar o registro DNS SRV do serviço ao qual você está se conectando, especifique o formato de conexão SRV em sua string de conexão. Além disso, se você habilitar o formato de conexão SRV, o PyMongo fará uma nova varredura automaticamente em busca de novos hosts sem precisar alterar a configuração do cliente .

O código a seguir mostra uma string de conexão que usa o formato de conexão SRV:

uri = "mongodb+srv://<hostname>/"

Para saber mais sobre o formato de conexão SRV, consulte a entrada Formato de conexão SRV no manual do MongoDB Server .

Se você tentar se conectar ao MongoDB Server v3.6 ou anterior, o PyMongo poderá gerar o seguinte erro:

pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 6, but this version of PyMongo requires at least 7 (MongoDB 4.0).

Isso ocorre quando a versão do driver é muito nova para o servidor ao qual está se conectando. Para resolver esse problema, você pode fazer o seguinte:

  • Atualize seu sistema do MongoDB para v4.0 ou posterior.

  • Faça downgrade para o PyMongo 4.10 ou anterior, que oferece suporte ao MongoDB Server v3.6 e posterior.

  • Faça downgrade para o PyMongo v3.x, que é compatível com o MongoDB Server v2.6 e versões posteriores.

Uma exceção AutoReconnect indica que ocorreu um failover . Isso significa que o PyMongo perdeu sua conexão com o membro primary original do conjunto de réplicas, e sua última operação pode ter falhado.

Quando esse erro ocorre, o PyMongo tenta encontrar automaticamente o novo membro principal para as operações subsequentes. Para gerenciar o erro, seu aplicativo deve realizar uma das seguintes ações:

  • Tente novamente a operação que pode ter falhado

  • Continue executando, entendendo que a operação pode ter falhado

Importante

O PyMongo gera um erro AutoReconnect em todas as operações até que o conjunto de réplicas eleja um novo membro primário.

Se você tentar se conectar a um conjunto de réplicas do MongoDB em um túnel SSH, receberá o seguinte erro:

File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1560, in count
return self._count(cmd, collation, session)
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1504, in _count
with self._socket_for_reads() as (connection, slave_ok):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/Library/Python/2.7/site-packages/pymongo/mongo_client.py", line 982, in _socket_for_reads
server = topology.select_server(read_preference)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 224, in select_server
address))
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 183, in select_servers
selector, server_timeout, address)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: timed out

Isso ocorre porque o PyMongo descobre membros do conjunto de réplicas usando a resposta do comando isMaster , que contém os endereços e portas dos outros membros do conjunto de réplicas. No entanto, você não pode acessar esses endereços e portas através do túnel SSH.

Em vez disso, você pode se conectar diretamente a um único nó do MongoDB usando a opção directConnection=True com o tunelamento SSH.

Para saber mais sobre como criar um objeto MongoClient no PyMongo, consulte a seguinte documentação da API:

Voltar

Criar um MongoClient