#python #database #mongodb #networking #pymongo
Вопрос:
Код
client = pymongo.MongoClient("mongodb srv://username:password@cluster0.zcui8.mongodb.net/db?retryWrites=trueamp;w=majorityamp;ssl=trueamp;ssl_cert_reqs=CERT_NONE")
db = client["db"]
#this gives the error
res = list(db.listings.find({}).limit(15).sort([('$natural',-1)]))
Ошибка:
pymongo.errors.ServerSelectionTimeoutError: No replica set members found yet
Я получаю эту ошибку в строке, где я назначаю переменную res
.
И я не получаю эту ошибку, когда запускаю ее на своей машине, но когда я запускаю ее на сервере, я получаю ошибку.
Комментарии:
1. вы добавили новый IP — адрес вашего сервера приложений в список разрешенных в Atlas ?
2. Нет, я добавил
0.0.0.0
, чтобы все могли подключиться.
Ответ №1:
Этот тип ошибки обычно:
- Не используете последние
pymongo
версии драйверов (https://pypi.org/project/pymongo/ список текущей последней версии) - Не имея
dnspython
установленного модуля (у меня были проблемы с 2.1.0, поэтому я бы рекомендовал 2.0.0)
Комментарии:
1. У меня есть dnspython, как я могу обновить pymongo до последней версии на Cpanel ?
2. Понятия не имею, никогда им не пользовался.
3. если у вас есть доступ к командной строке, вы можете запустить: «python pip install pymongo» или «sudo python pip install pymongo».
4. Я обновил pymongo и убедился, что dnspython версии 2.0.0, и все равно получил эту ошибку:
pymongo.errors.ServerSelectionTimeoutError: No replica set members found yet, Timeout: 30s, Topology Description: <TopologyDescription id: 617d23fae48c883eebfe53be, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('cluster0-shard-00-00.zuia8.mongodb.net', 27017) server_type: Unknown, rtt: None>, <ServerDescription ('cluster0-shard-00-01.zuia8.mongodb.net', 27017) server_type: Unkn
Ответ №2:
Я перепробовал все решения в этих ответах, но единственное, что сработало, — это просто использовать flask_pymongo
модуль вместо pymongo
. И теперь я не получаю никаких ошибок.