簡體   English   中英

Pymongo pymongo.errors.ServerSelectionTimeoutError 使用示例代碼時

[英]Pymongo pymongo.errors.ServerSelectionTimeoutError when using example code

我正在嘗試運行非常簡單的代碼來弄清楚如何將 pymongo 與 MongoDB Atlas Cloud 一起使用。

這是示例代碼

import pymongo

client = pymongo.MongoClient("mongodb+srv://{myusername}:{mypassword}@cluster0-uywu8.mongodb.net/test?retryWrites=true&w=majority")
db = client.BroadwayMatch
print(db)
collection = db.Artists
print(collection)

print(collection.insert_one({'x': 1}))

BroadwayMatch 和 Artists 是我上周能夠插入的現有數據庫和 collections,我不確定發生了什么變化。 它似乎成功連接到數據庫和集合,但由於某種原因無法讀取或寫入它。 collections 的所有屬性都可以訪問,但所有方法都會導致 ServerSelectionTimeoutError。 這是此片段中的 output

Database(MongoClient(host=['cluster0-shard-00-01-uywu8.mongodb.net:27017', 'cluster0-shard-00-00-uywu8.mongodb.net:27017', 'cluster0-shard-00-02-uywu8.mongodb.net:27017'], document_class=dict, tz_aware=False, connect=True, authsource='admin', replicaset='Cluster0-shard-0', ssl=True, retrywrites=True, w='majority'), 'BroadwayMatch')
Collection(Database(MongoClient(host=['cluster0-shard-00-01-uywu8.mongodb.net:27017', 'cluster0-shard-00-00-uywu8.mongodb.net:27017', 'cluster0-shard-00-02-uywu8.mongodb.net:27017'], document_class=dict, tz_aware=False, connect=True, authsource='admin', replicaset='Cluster0-shard-0', ssl=True, retrywrites=True, w='majority'), 'BroadwayMatch'), 'Artists')
Traceback (most recent call last):
  File "C:\Python37\Spotify-Match\mongotest.py", line 10, in <module>
    print(collection.insert_one({'x': 1}))
  File "C:\Python37\lib\site-packages\pymongo\collection.py", line 700, in insert_one
    session=session),
  File "C:\Python37\lib\site-packages\pymongo\collection.py", line 614, in _insert
    bypass_doc_val, session)
  File "C:\Python37\lib\site-packages\pymongo\collection.py", line 602, in _insert_one
    acknowledged, _insert_command, session)
  File "C:\Python37\lib\site-packages\pymongo\mongo_client.py", line 1279, in _retryable_write
    with self._tmp_session(session) as s:
  File "C:\Python37\lib\contextlib.py", line 112, in __enter__
    return next(self.gen)
  File "C:\Python37\lib\site-packages\pymongo\mongo_client.py", line 1611, in _tmp_session
    s = self._ensure_session(session)
  File "C:\Python37\lib\site-packages\pymongo\mongo_client.py", line 1598, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "C:\Python37\lib\site-packages\pymongo\mongo_client.py", line 1551, in __start_session
    server_session = self._get_server_session()
  File "C:\Python37\lib\site-packages\pymongo\mongo_client.py", line 1584, in _get_server_session
    return self._topology.get_server_session()
  File "C:\Python37\lib\site-packages\pymongo\topology.py", line 434, in get_server_session
    None)
  File "C:\Python37\lib\site-packages\pymongo\topology.py", line 200, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: connection closed,connection closed,connection closed

我不確定我做錯了什么,有人可以幫忙嗎?

您可能無法連接到 Atlas 服務器的原因:

  • 您的白名單沒有啟用您當前的 IP 地址
  • 您使用了錯誤的用戶名和/或密碼。 在您的情況下,您的 fString 似乎在一開始就缺少 f 。

When diagnosing these conditions cutting and pasting the MongoDB Atlas connection string (see below) for the MongoDB shell or MongoDB Compass can often expose username and/or password errors.

MongoDB Shell 的 MongoDB Atlas Connection 屏幕對話框的屏幕主機

要么您的 mongo 服務器未公開,否則它不在默認端口中。 嘗試以下操作:

import pymongo
client = pymongo.MongoClient("mongodb://uname:pass@ip:port/")
db = client['BroadwayMatch']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM