Escolha um destino de conexão
Nesta página
Visão geral
Neste guia, você pode aprender como usar uma string de conexão e objeto MongoClient
para conectar a diferentes tipos de sistemas MongoDB.
Atlas
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()
Implantações locais
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)
Conjuntos de réplicas
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âmetrodirectConnection
.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.
Inicialização
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)
Descoberta de serviço DNS
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 .
Solução de problemas
Servidor MongoDB relata versão X de fio, PyMongo requer Y
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.
Reconexão automática
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.
Tempo limite ao acessar o MongoDB do PyMongo com tunelamento
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.
Documentação da API
Para saber mais sobre como criar um objeto MongoClient
no PyMongo, consulte a seguinte documentação da API: