【问题标题】:Connecting to Atlas MongoDb using pymongo - ServerSelectionTimeoutError使用 pymongo 连接到 Atlas MongoDb - ServerSelectionTimeoutError
【发布时间】:2020-04-06 12:16:54
【问题描述】:

我无法连接到我在 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

【问题讨论】:

    标签: python mongodb proxy database-connection mongodb-atlas


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 因为同样的问题,我被卡住了,是否可以提供更详细的答案?
      • @ArmenSanoyan 在工作中我们有一个使用代理的旧 vpn,因此我无法建立连接。我们还有一个较新的 vpn,它没有使用代理,并且使用这个较新的 vpn 我能够毫无问题地运行它。不幸的是,我没有在代理后面运行它的解决方案。
      • 我已经解决了我的问题,不是因为代理,而是感谢任何方式的回答
      猜你喜欢
      • 1970-01-01
      • 2022-12-18
      • 2017-02-17
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多