首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pymongo.errors.ConfigurationError:即使安装了pymongo和dnspython,也必须安装"dnspython“模块才能使用mongodb+srv:// URI

pymongo.errors.ConfigurationError:即使安装了pymongo和dnspython,也必须安装"dnspython“模块才能使用mongodb+srv:// URI
EN

Stack Overflow用户
提问于 2020-02-07 17:55:49
回答 3查看 5.3K关注 0票数 4

我试着用pymongo连接MongoDB。但是,即使在安装pymongo和dnspython.之后,我也遇到了dnspython必须安装的错误。

我的代码是:

代码语言:javascript
复制
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不能识别我已经安装了pymongo和dnspython?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-08 11:59:49

您的问题是在运行的环境中没有安装dnspython。如果安装了dnspython,则不会收到此错误消息。

在docker中使用划痕环境可以很容易地证明这一点;使用以下方法启动一个码头容器:

代码语言:javascript
复制
docker run --rm -it python:3.8.1-buster /bin/bash

然后,在shell中运行以下命令,在一个只安装pymongo的新venv中创建和运行程序:

代码语言:javascript
复制
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

您应该看到以下输出:

代码语言:javascript
复制
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

你会注意到你所犯的错误。现在添加dnspython并再次运行:

代码语言:javascript
复制
pip install dnspython
pip freeze && python test.py

现在,您将看到由于我们没有正确的用户名和密码而被删除的身份验证失败消息。您可以从pip freeze命令中看到,这次安装了dnspython。

代码语言:javascript
复制
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.
票数 5
EN

Stack Overflow用户

发布于 2021-01-10 11:57:18

不要忘记导入模块:

代码语言:javascript
复制
import dns
票数 1
EN

Stack Overflow用户

发布于 2022-06-07 04:47:45

即使在安装dnspython和pymongo之后,我也得到了这个错误。

但是,通过安装dnspython的1.16.0版本,可以简单地解决错误。

代码语言:javascript
复制
pip install dnspython==1.16.0
pip install pymongo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60118721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档