pymongo.errors.ConfigurationError:The";“dnspython”;必须安装模块才能使用mongodb+;srv://即使在安装pymongo和dnspython之后仍然存在URI

pymongo.errors.ConfigurationError:The";“dnspython”;必须安装模块才能使用mongodb+;srv://即使在安装pymongo和dnspython之后仍然存在URI,python,mongodb,flask,pymongo,Python,Mongodb,Flask,Pymongo,我尝试使用pymongo连接MongoDB。但是,我遇到了dnspython必须安装的错误,即使在我安装pymongo和dnspython之后也是如此。 我的代码是: import pymongo USER = '' PASSWORD = '' client = pymongo.MongoClient( "mongodb+srv://" + USER + ":" + PASSWORD + "@tbn-ph9ol.mongodb.net/test?retryWrites=true&

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

我的代码是:

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?

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

使用docker中的scratch环境很容易证明这一点;使用以下命令启动docker容器:

docker run --rm -it python:3.8.1-buster /bin/bash
然后在shell上运行以下命令,在只安装pymongo的新venv中创建并运行程序:

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
由于我们没有正确的用户名和密码,您现在将看到一条验证失败的消息。您可以从
pipfreeze
命令中看到,这次安装了dnspython

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.
dnspython==1.16.0
pymongo==3.10.1
回溯(最近一次呼叫最后一次):
文件“test.py”,第16行,在
集合。插入一个(post)
文件“/tmp/tmp.vdpqnminfo/venv/lib/python3.8/site packages/pymongo/collection.py”,第695行,插入
...
... 
...
pymongo.errors.OperationFailure:身份验证失败。

不要忘记导入模块:

import dns

我怀疑这是一个venv问题。键入
pip freeze
并报告结果。
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.
import dns