pymongo: не удалось прочитать конфигурацию преобразователя или указать серверы имен

#python #python-3.x #mongodb

#python #python-3.x #mongodb

Вопрос:

Я впервые использую MongoDB, но, похоже, я не могу решить эту проблему, мой друг, который использует MongoDB, не знает, как использовать python, поэтому он не может мне помочь.

Вот мой код:

 import pymongo

# Replace the uri string with your MongoDB deployment's connection string.
conn_str = "mongodb srv://sqdnoises:{mypass}@sqd.d4kjb.mongodb.net/myFirstDatabase?retryWrites=trueamp;w=majority"

# set a 5-second connection timeout
client = pymongo.MongoClient(conn_str, serverSelectionTimeoutMS=5000)

try:
    print(client.server_info())
    print('nnn aka connected')
except Exception:
    print("Unable to connect to the server.")
 

Где {mypass} мой пароль MongoDB.

Я продолжаю получать эту ошибку:

 Traceback (most recent call last):
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 782, in read_resolv_conf
    f = stack.enter_context(open(f))
FileNotFoundError: [Errno 2] No such file or directory: '/etc/resolv.conf'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/srv_resolver.py", line 88, in _resolve_uri
    results = _resolve('_'   self.__srv   '._tcp.'   self.__fqdn,
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/srv_resolver.py", line 41, in _resolve
    return resolver.resolve(*args, **kwargs)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 1305, in resolve
    return get_default_resolver().resolve(qname, rdtype, rdclass, tcp, source,
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 1278, in get_default_resolver
    reset_default_resolver()
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 1290, in reset_default_resolver
    default_resolver = Resolver()
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 734, in __init__
    self.read_resolv_conf(filename)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/dns/resolver.py", line 785, in read_resolv_conf
    raise NoResolverConfiguration
dns.resolver.NoResolverConfiguration: Resolver configuration could not be read or specified no nameservers.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/storage/emulated/0/! workspace/mongolearn/main.py", line 7, in <module>
    client = pymongo.MongoClient(conn_str, serverSelectionTimeoutMS=5000)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/mongo_client.py", line 677, in __init__
    res = uri_parser.parse_uri(
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/uri_parser.py", line 532, in parse_uri
    nodes = dns_resolver.get_hosts()
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/srv_resolver.py", line 119, in get_hosts
    _, nodes = self._get_srv_response_and_hosts(True)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/srv_resolver.py", line 99, in _get_srv_response_and_hosts
    results = self._resolve_uri(encapsulate_errors)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/pymongo/srv_resolver.py", line 95, in _resolve_uri
    raise ConfigurationError(str(exc))
pymongo.errors.ConfigurationError: Resolver configuration could not be read or specified no nameservers.
 

Как мне это исправить?

Я следую https://docs.mongodb.com/drivers/pymongo /

Ответ №1:

действительно, проблема в том, что dnspython пытается открыть /etc/resolv.conf

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

Просто добавьте этот код в начало вашего основного кода, и этого должно быть достаточно, чтобы преодолеть это препятствие..