使用 pymongo 连接到 Atlas MongoDb - ServerSelectionTimeoutError

Connecting to Atlas MongoDb using pymongo - ServerSelectionTimeoutError

我无法连接到我在 Atlas MongoDB 中设置的数据库。 我已经阅读了其他多个问题,但没有答案使我的连接有效。 我想指出的是,我正试图通过公司的代理访问它(如果这与它有任何关系的话)。 我的代码是这样的,仅在我尝试计算文档的最后一行失败:

from pymongo import MongoClient


client = MongoClient(
    "mongodb+srv://name:pass@iliastrialcluster-1tl2y.azure.mongodb.net/test?retryWrites=true&w=majority&ssl=true&ssl_cert_reqs=CERT_NONE"
)
db = client.get_database('sample_airbnb')
print(db)
listings_and_reviews = db.listingAndReviews
print(listings_and_reviews)
listings_and_reviews.count_documents({})

我得到的错误是:

Traceback (most recent call last):
  File "C:~/mongo_connection1.py", line 11, in <module>
    listings_and_reviews.count_documents({})
  File "C:~\lib\site-packages\pymongo\collection.py", line 1721, in count_documents
    _cmd, self._read_preference_for(session), session)
  File "C:~\lib\site-packages\pymongo\mongo_client.py", line 1454, in _retryable_read
    read_pref, session, address=address)
  File "C:~\lib\site-packages\pymongo\mongo_client.py", line 1253, in _select_server
    server = topology.select_server(server_selector)
  File "C:~\lib\site-packages\pymongo\topology.py", line 235, in select_server
    address))
  File "C:~\lib\site-packages\pymongo\topology.py", line 193, in select_servers
    selector, server_timeout, address)
  File "C:~\lib\site-packages\pymongo\topology.py", line 209, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: iliastrialcluster-shard-00-00-1tl2y.azure.mongodb.net:27017: timed out,iliastrialcluster-shard-00-02-1tl2y.azure.mongodb.net:27017: timed out,iliastrialcluster-shard-00-01-1tl2y.azure.mongodb.net:27017: timed out

ServerSelectionTimeout 错误是客户端告诉您无法连接到服务器的方式。使用 MongoDB Atlas 时出现这些错误的主要原因是未能启用客户端 运行 所在节点的 access for the IP address

要验证尝试使用 MongoDB shell mongo 使用相同的连接字符串进行连接。如果连接失败,那么您就知道这不是 Python 问题。您的客户端代码看起来不错,顺便说一句,所以我很确定它就是这样。

延迟评估与服务器的连接,因此在您发出实际请求之前我们不会尝试启动连接。在这种情况下, count_documents 调用。这就是为什么这是生成错误的调用。

@JoeDrumgoole 感谢您的回答。问题毕竟是代理,停用它后连接工作正常。很高兴知道延迟评估与服务器的连接。