使用pymongo服务器SelectionTimeOutError连接到Atlas MongoDb

2024-09-30 00:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: inpyclientnetservermongodblibpackages
2条回答

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

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

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

@JoeDrumgoole谢谢你的回答。问题归根结底是代理,停用代理后,连接工作正常。很高兴知道到服务器的连接是延迟评估的

相关问题 更多 >

    热门问题