'pymongo - "dnspython" module must be installed to use mongodb+srv:// URIs
I am trying to connect MongoDB from Atlas.
My mongo uri is: mongodb+srv://abc:[email protected]/admin?retryWrites=True
My pymongo version is 3.6.1
I have installed dnspython
and done import dns
But i still get this error:
dnspython module must be installed to use mongodb+srv:// URI
Solution 1:[1]
In order to use mongo+srv protocol, you need to install pymongo-srv Launch this command to do it with python 3:
pip3 install pymongo[srv]
or this one for other versions:
pip install pymongo[srv]
And as suggested by @lukrebs, add quotes for ZSH:
pip3 install 'pymongo[srv]'
Solution 2:[2]
I solved this problem with:
$ python -m pip install pymongo[srv]
Solution 3:[3]
I would like to answer my own questions here. As I mentioned in the comment, the kernel of the jupyter notebook has to be restarted in order for the pymongo to take effect of the loaded dnspython
.
Solution 4:[4]
In requirements.txt, replace pymongo
with pymongo[tls,srv]
, as mentioned here.
Solution 5:[5]
I got stuck with the same problem and tried
pip install dnspython==2.0.0
This is the latest version from https://pypi.org/project/dnspython/
It worked :D
Solution 6:[6]
you can use mongo://
instead of mongodb+srv://
Solution 7:[7]
May be the protocol, your URI should start with:
mongo+srv instead of mongo+src
If it still not working please put a pip list with the versions of PyMongo and dnspython (and version of python that you are using)
Solution 8:[8]
I had the same problem on Ubuntu 18 but since I am using Anaconda I just tried
Conda install dns python
I had an IPython running, it did not work while the same instance was open but when I restarted that instance it worked.
On a different machine using
Conda install dns python
and it worked but I had to restart my machine altogether due to a different reason before testing it
Solution 9:[9]
pip install dnspython
dnspython is a DNS toolkit for Python. It supports almost all record types. It can be used for queries, zone transfers, and dynamic updates. It supports TSIG authenticated messages and EDNS0.
Solution 10:[10]
I had the same issue and found the following line.
import dns.resolver
dns.resolver.default_resolver=dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers=['8.8.8.8']
It worked for me.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow