pymon go .errors.ConfigurationError: Для использования URI mongodb + srv: // должен быть установлен модуль "dns python" даже после установки pymon go и dns python - PullRequest
0 голосов
/ 07 февраля 2020

Я попытался подключить MongoDB, используя pymon go. Тем не менее, я встретил ошибку DNS python должны быть установлены даже после того, как я установил Pymon go и DNS python.

Мой код:

import pymongo
USER = ''
PASSWORD = ''

client = pymongo.MongoClient(
    "mongodb+srv://" + USER + ":" + PASSWORD + "@tbn-ph9ol.mongodb.net/test?retryWrites=true&w=majority")

db = client["tbn"]

collection = db["inputs"]

post = {"_id": 0,
        "temperature": 37,
        }

collection.insert_one(post)

Почему mongodb не может распознать, что я установил pymon go и dns python?

1 Ответ

1 голос
/ 08 февраля 2020

Ваша проблема в том, что у вас не установлена ​​dnspython в среде, в которой вы работаете. Если у вас установлен dns python, вы не получите это сообщение об ошибке.

Это легко проверяется с помощью скриптовой среды в докере; запустите контейнер docker с:

docker run --rm -it python:3.8.1-buster /bin/bash

Затем в оболочке выполните следующие команды, чтобы создать и запустить вашу программу в новом venv с установленным только pymon go:

cd "$(mktemp -d)"
python -m venv venv
. venv/bin/activate
pip install --upgrade pip
pip install pymongo
cat << EOF > test.py
import pymongo
USER = 'x'
PASSWORD = 'y'

client = pymongo.MongoClient(
    "mongodb+srv://" + USER + ":" + PASSWORD + "@tbn-ph9ol.mongodb.net/test?retryWrites=true&w=majority")

db = client["tbn"]

collection = db["inputs"]

post = {"_id": 0,
        "temperature": 37,
        }

collection.insert_one(post)
EOF
pip freeze && python test.py

Вы должны увидеть следующий вывод:

pymongo==3.10.1
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    client = pymongo.MongoClient(
  File "/tmp/tmp.vdpqnMOnFO/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 619, in __init__
    res = uri_parser.parse_uri(
  File "/tmp/tmp.vdpqnMOnFO/venv/lib/python3.8/site-packages/pymongo/uri_parser.py", line 390, in parse_uri
    raise ConfigurationError('The "dnspython" module must be '
pymongo.errors.ConfigurationError: The "dnspython" module must be installed to use mongodb+srv:// URIs

Вы увидите ошибку, которую получаете. Теперь добавьте dns python и выполните снова:

pip install dnspython
pip freeze && python test.py

Теперь вы увидите сообщение об ошибке аутентификации, истекшее, поскольку у нас нет правильного имени пользователя и пароля. Из команды pip freeze видно, что на этот раз установлен dns python.

dnspython==1.16.0
pymongo==3.10.1
Traceback (most recent call last):
  File "test.py", line 16, in <module>
    collection.insert_one(post)
  File "/tmp/tmp.vdpqnMOnFO/venv/lib/python3.8/site-packages/pymongo/collection.py", line 695, in insert_one
...
... <snip>
...
pymongo.errors.OperationFailure: Authentication failed.
...