文档菜单
文档首页
/ / /
PyMongo
/

选择连接目标

本页内容

  • 概述
  • Atlas
  • 本地部署
  • 副本集
  • 初始化
  • 故障排除
  • 服务器报告线版本 X,PyMongo 需要 Y
  • 自动重连
  • API 文档

在本指南中,您可以学习如何使用连接字符串和MongoClient对象连接到不同类型的MongoDB部署。

要连接到Atlas上的MongoDB部署,请在您的连接字符串中包含以下元素

  • 您的Atlas集群的URL

  • MongoDB用户名

  • MongoDB密码

然后,将您的连接字符串传递给MongoClient构造函数。

提示

按照Atlas驱动器连接指南获取您的连接字符串。

当您连接到Atlas时,我们建议使用稳定API客户端选项,以避免Atlas升级到MongoDB服务器的新版本时出现破坏性更改。有关稳定API功能的更多信息,请参阅稳定API页面.

以下代码显示了如何使用PyMongo连接到Atlas集群。代码还使用server_api选项指定稳定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()

要连接到本地MongoDB部署,请将主机名设置为localhost。默认情况下,mongod进程运行在端口27017上,但您可以根据自己的部署进行自定义。

以下代码演示了如何使用PyMongo连接到本地MongoDB部署

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

要连接到副本集,请在连接字符串中指定副本集成员的主机名(或IP地址)和端口号。

如果您无法提供副本集中所有主机列表,您可以指定一个或多个主机,并指示PyMongo执行自动发现以找到其他主机。要指示驱动器执行自动发现,请执行以下操作之一

  • 将副本集名称指定为replicaSet参数的值。

  • false指定为directConnection参数的值。

  • 指定副本集中的多个主机。

在以下示例中,驱动器使用示例连接URI连接到MongoDB副本集sampleRS,该副本集在不同的主机上运行在端口27017上,包括host1

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

注意

MongoClient构造函数是非阻塞的。当您连接到副本集时,构造函数立即返回,而客户端使用后台线程连接到副本集。

如果您构造了一个MongoClient并立即打印其nodes属性的字符串表示形式,当客户端连接到副本集成员时,列表可能为空。

要初始化副本集,您必须直接连接到单个成员。为此,将 directConnection 连接选项设置为 True。您可以通过两种方式完成此操作:通过向 MongoClient 构造函数传递参数,或通过连接字符串中的参数设置。

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

如果您尝试连接到MongoDB服务器v3.4或更早版本,PyMongo可能会引发以下错误

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

这发生在驱动程序版本对于它所连接的服务器来说太新的时候。要解决此问题,将您的MongoDB部署升级到v3.6或更高版本,或者降级到支持MongoDB服务器v2.6及更高版本的PyMongo v3.x。

一个 自动重连 异常表示发生了故障转移。这意味着 PyMongo 已经失去了与副本集原始主成员的连接,其最后操作可能会失败。

当出现此错误时,PyMongo 会自动尝试找到后续操作的新主成员。为了处理此错误,您的应用程序必须采取以下操作之一

  • 重试可能失败的操作

  • 继续运行,了解操作可能已失败

重要

PyMongo 会在所有操作上抛出 自动重连 错误,直到副本集选举出新的主成员。

要了解有关在 PyMongo 中创建 MongoClient 对象的更多信息,请参阅以下 API 文档

返回

创建 MongoClient