Ошибка конфигурации при попытке подключить базу данных mongodb на python

#python-3.x #mongodb #pymongo

#python-3.x #mongodb #pymongo

Вопрос:

Я продолжаю получать pymongo.errors.ConfigurationError: query() got an unexpected keyword argument 'lifetime' , хотя у меня установлены все последние версии pymongo и dnspython. Это мой код…

 import pymongo

client = pymongo.MongoClient("mongodb srv://Nethrenial:notrealpassword@db-for-toodooo.shhiq.mongodb.net/TooDooo?retryWrites=trueamp;w=majority")
users = client.users.find()
user_list = []
for user in users:
    user_list.append(user)
print(user_list)

 

И это полное исключение,

 Traceback (most recent call last):
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongosrv_resolver.py", line 72, in _resolve_uri
    results = resolver.query('_mongodb._tcp.'   self.__fqdn, 'SRV',
TypeError: query() got an unexpected keyword argument 'lifetime'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:UserslenovoDesktopTooDooodatabase_functions.py", line 4, in <module>
    client = pymongo.MongoClient("mongodb srv://Nethrenial:nethrenial@db-for-toodooo.shhiq.mongodb.net/TooDooo?retryWrites=trueamp;w=majority")
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongomongo_client.py", line 639, in __init__
    res = uri_parser.parse_uri(
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongouri_parser.py", line 500, in parse_uri
    nodes = dns_resolver.get_hosts()
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongosrv_resolver.py", line 102, in get_hosts
    _, nodes = self._get_srv_response_and_hosts(True)
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongosrv_resolver.py", line 83, in _get_srv_response_and_hosts
    results = self._resolve_uri(encapsulate_errors)
  File "C:UserslenovoAppDataLocalProgramsPythonPython39libsite-packagespymongosrv_resolver.py", line 79, in _resolve_uri
    raise ConfigurationError(str(exc))
pymongo.errors.ConfigurationError: query() got an unexpected keyword argument 'lifetime'


 

Комментарии:

1. Пожалуйста, опубликуйте свой вывод pip freeze

Ответ №1:

Если вы используете Python 3, вы должны использовать dnspython3 вместо dnspython . Эта библиотека фактически использует dnspython under the hood, но устанавливает неправильную версию 1.15.0, такую же, как для основной библиотеки. Вы должны изменить его вручную на 2.1.0. На ПК (Windows) также устанавливается starlette библиотека. Никогда не меняйте ее версию для обновления, она перестает работать.

Проблемы несовместимости и плохая поддержка экосистемы, по-видимому, являются распространенной проблемой в мире Python.

Комментарии:

1. Мне нужно попробовать это, и да, много проблем с несовместимостью. Я попытался node.js уже какое-то время. Я думаю, что это хорошо подходит для меня. В любом случае, спасибо, что ответили на мой вопрос, очень ценю это.

2. pip install dnspython== 2.1.0 сработал для меня; Я также проигнорировал ошибку конфликта.

Ответ №2:

В большинстве случаев это происходит из-за устаревшей библиотеки dnspython. Я решил свою проблему, просто переустановив / обновив dnspython

 pip3 install dnspython
 

Ответ №3:

Казнь pip install dnspython не сработала для меня. Следующий код выполнил задание:

 from pymongo import MongoClient
import dns.resolver

dns.resolver.default_resolver=dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers=['8.8.8.8']
 

Ответ №4:

Для меня удаление / установка pymongo решила проблему (обновление не помогло):

 pip uninstall pymongo
pip install pymongo