Escolha um destino de conexão
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 da API estável. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
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()
import asyncio from pymongo import AsyncMongoClient from pymongo.server_api import ServerApi async def main(): # 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 = AsyncMongoClient(uri, server_api=ServerApi( version='1', strict=True, deprecation_errors=True)) try: # Send a ping to confirm a successful connection await 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 await client.close() asyncio.run(main())
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 código a seguir mostra como usar o PyMongo para se conectar a um MongoDB deployment local. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
from pymongo import MongoClient uri = "mongodb://localhost:27017/" client = MongoClient(uri)
from pymongo import AsyncMongoClient uri = "mongodb://localhost:27017/" client = AsyncMongoClient(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. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
from pymongo import MongoClient client = MongoClient("mongodb://host1:27017,host2:27017,host3:27017")
from pymongo import AsyncMongoClient client = AsyncMongoClient("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
. Selecione a aba Synchronous ou Asynchronous para ver o código correspondente:
from pymongo import MongoClient uri = "mongodb://host1:27017/?replicaSet=sampleRS" client = MongoClient(uri)
from pymongo import AsyncMongoClient uri = "mongodb://host1:27017/?replicaSet=sampleRS" client = AsyncMongoClient(uri)
Observação
Conjunto de réplicas no Docker
Importante
v4.4 Fim da vida útil
v4.4 chegou ao fim da vida útil em 29 2024 e não é mais compatível com o MongoDB.
Plataforma | Arquitetura | Edição | 8.0 | 7.0 | 6.0 | 5.0 | 4.4 |
---|---|---|---|---|---|---|---|
Amazon Linux 2023 | x86_64 | Enterprise | |||||
Amazon Linux 2023 | x86_64 | Community | |||||
Amazon Linux V2 | x86_64 | Enterprise | |||||
Amazon Linux V2 | x86_64 | Community | |||||
Debian 12 | x86_64 | Enterprise | |||||
Debian 12 | x86_64 | Community | |||||
Debian 11 | x86_64 | Enterprise | 5.0.8+ | ||||
Debian 11 | x86_64 | Community | 5.0.8+ | ||||
Debian 10 | x86_64 | Enterprise | |||||
Debian 10 | x86_64 | Community | |||||
Debian 9 | x86_64 | Enterprise | |||||
Debian 9 | x86_64 | Community | |||||
RHEL/Rocky/Alma/Oracle Linux 9.0+ [1] | x86_64 | Enterprise | 6.0.4+ | ||||
RHEL/Rocky/Alma/Oracle Linux 9.0+ [1] | x86_64 | Community | 6.0.4+ | ||||
RHEL/Rocky/Alma/Oracle Linux 8.0+ [1] | x86_64 | Enterprise | |||||
RHEL/Rocky/Alma/Oracle Linux 8.0+ [1] | x86_64 | Community | |||||
RHEL/CentOS/Oracle linux 7.0+ [1] | x86_64 | Enterprise | |||||
RHEL/CentOS/Oracle linux 7.0+ [1] | x86_64 | Community | |||||
RHEL/CentOS/Oracle linux 6.2+ [1] | x86_64 | Enterprise | |||||
RHEL/CentOS/Oracle linux 6.2+ [1] | x86_64 | Community | |||||
SLES 15 | x86_64 | Enterprise | |||||
SLES 15 | x86_64 | Community | |||||
SLES 12 | x86_64 | Enterprise | |||||
SLES 12 | x86_64 | Community | |||||
Ubuntu 24.04 | x86_64 | Enterprise | |||||
Ubuntu 24.04 | x86_64 | Community | |||||
Ubuntu 22.04 | x86_64 | Enterprise | 6.0.4+ | ||||
Ubuntu 22.04 | x86_64 | Community | 6.0.4+ | ||||
Ubuntu 20.04 | x86_64 | Enterprise | |||||
Ubuntu 20.04 | x86_64 | Community | |||||
Ubuntu 18.04 | x86_64 | Enterprise | |||||
Ubuntu 18.04 | x86_64 | Community | |||||
Ubuntu 16.04 | x86_64 | Enterprise | |||||
Ubuntu 16.04 | x86_64 | Community | |||||
Windows 11 | x86_64 | Enterprise | |||||
Windows 11 | x86_64 | Community | |||||
Windows Server 2022 | x86_64 | Enterprise | |||||
Windows Server 2022 | x86_64 | Community | |||||
Windows Server 2019 | x86_64 | Enterprise | |||||
Windows Server 2019 | x86_64 | Community | |||||
Windows 10 / Server 2016 | x86_64 | Enterprise | |||||
Windows 10 / Server 2016 | x86_64 | Community | |||||
macOS 14 | x86_64 | Enterprise | |||||
macOS 14 | x86_64 | Community | |||||
macOS 13 | x86_64 | Enterprise | |||||
macOS 13 | x86_64 | Community | |||||
macOS 12 | x86_64 | Enterprise | |||||
macOS 12 | x86_64 | Community | |||||
macOS 11 | x86_64 | Enterprise | |||||
macOS 11 | x86_64 | Community | |||||
macOS 10.15 | x86_64 | Enterprise | |||||
macOS 10.15 | x86_64 | Community | |||||
macOS 10.14 | x86_64 | Enterprise | |||||
macOS 10.14 | x86_64 | Community | |||||
macOS 10.13 | x86_64 | Enterprise | |||||
macOS 10.13 | x86_64 | Community | |||||
macOS 14 | arm64 | Enterprise | |||||
macOS 14 | arm64 | Community | |||||
macOS 13 | arm64 | Enterprise | |||||
macOS 13 | arm64 | Community | |||||
macOS 12 | arm64 | Enterprise | |||||
macOS 12 | arm64 | Community | |||||
macOS 11 | arm64 | Enterprise | |||||
macOS 11 | arm64 | Community | |||||
Amazon Linux 2023 | arm64 | Enterprise | |||||
Amazon Linux 2023 | arm64 | Community | |||||
Amazon Linux 2 | arm64 | Enterprise | 4.4.4+ | ||||
Amazon Linux 2 | arm64 | Community | 4.4.4+ | ||||
RHEL/CentOS/Rocky/Alma 9 | arm64 | Enterprise | |||||
RHEL/CentOS/Rocky/Alma 9 | arm64 | Community | |||||
RHEL/CentOS/Rocky/Alma 8 | arm64 | Enterprise | 4.4.4+ | ||||
RHEL/CentOS/Rocky/Alma 8 | arm64 | Community | 4.4.4+ | ||||
Ubuntu 24.04 | arm64 | Enterprise | |||||
Ubuntu 24.04 | arm64 | Community | |||||
Ubuntu 22.04 | arm64 | Enterprise | 6.0.4+ | ||||
Ubuntu 22.04 | arm64 | Community | 6.0.4+ | ||||
Ubuntu 20.04 | arm64 | Enterprise | |||||
Ubuntu 20.04 | arm64 | Community | |||||
Ubuntu 18.04 | arm64 | Enterprise | |||||
Ubuntu 18.04 | arm64 | Community | |||||
Ubuntu 16.04 | arm64 | Enterprise | |||||
RHEL/Rocky/Alma 9 | ppc64le | Enterprise | |||||
RHEL/Rocky/Alma 8 | ppc64le | Enterprise | |||||
RHEL/CentOS 7 | ppc64le | Enterprise | 6.0.7+ | ||||
RHEL/Rocky/Alma 9 | s390x | Enterprise | |||||
RHEL/Rocky/Alma 8 | s390x | Enterprise | 5.0.9+ | ||||
RHEL/CentOS 7 | s390x | Enterprise | |||||
RHEL/CentOS 7 | s390x | Community |
[1] | (1, 2, 3, 4, 5, 6, 7, 8) No Oracle Linux, o MongoDB suporta somente o Kernel Compatível com Red Hat. |
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)
from pymongo import AsyncMongoClient client = AsyncMongoClient("mongodb://<hostname>:<port>", directConnection=True)
from pymongo import AsyncMongoClient uri = ("mongodb://<hostname>:<port>/?" "directConnection=true") client = AsyncMongoClient(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: