Pymongo pymongo.errors.ServerSelectionTimeoutError при использовании примера кода - PullRequest
1 голос
/ 05 ноября 2019

Я пытаюсь запустить очень простой код, чтобы выяснить, как использовать 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 - это существующие базы данныхи коллекции, которые я смог вставить на прошлой неделе, я не уверен, что изменилось. Кажется, что он успешно подключается к базе данных и коллекции, но по какой-то причине не может читать или писать в нее. Все атрибуты коллекций могут быть доступны, но все методы приводят к ServerSelectionTimeoutError. Вот вывод из этого фрагмента

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

Я не уверен, что я делаю неправильно, кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Причины, по которым вы, возможно, не сможете подключиться к серверу Atlas:

  • Ваш белый список не активировал ваш текущий IP-адрес
  • , который вы используетенеправильное имя пользователя и / или пароль. В вашем случае это выглядит так, как будто в вашей fString отсутствует f в начале.

При диагностике этих условий вырезание и вставка строки подключения MongoDB Atlas (см. Ниже) для оболочки MongoDB или MongoDB Compass часто может содержать ошибки имени пользователя и / или пароля.

Screenhost of MongoDB Atlas Connection screen dialog for MongoDB Shell

0 голосов
/ 05 ноября 2019

Либо ваш сервер Монго не выставлен, в противном случае он не находится в порте по умолчанию. Попробуйте следующее:

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