75

I am trying to connect MongoDB from Atlas.

My mongo uri is: mongodb+srv://abc:123@something.something.com/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

veben
  • 19,637
  • 14
  • 60
  • 80
addicted
  • 2,901
  • 3
  • 28
  • 49

11 Answers11

126

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]'
veben
  • 19,637
  • 14
  • 60
  • 80
24

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.

addicted
  • 2,901
  • 3
  • 28
  • 49
19

I solved this problem with:

$ python -m pip install pymongo[srv]

KetZoomer
  • 2,701
  • 3
  • 15
  • 43
11

In requirements.txt, replace pymongo with pymongo[tls,srv], as mentioned here.

alter123
  • 601
  • 2
  • 11
  • 32
11

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

Noobajaxpython
  • 111
  • 1
  • 3
5

you can use mongo:// instead of mongodb+srv://

msklc
  • 553
  • 1
  • 8
  • 10
  • I don't think older version of mongo support replicas. If you use `mongo://`, final URI will be `mongo://db-part-0.host.com:27017, db-part-1.host.com:27017, db-part-2.host.com:27017`. Yes, there is comma in the URI. – addicted Sep 29 '19 at 19:45
1

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.

toshi456
  • 213
  • 1
  • 7
0

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)

Fernando Byn
  • 97
  • 1
  • 2
  • 7
0

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

Dharman
  • 30,962
  • 25
  • 85
  • 135
Max
  • 4,152
  • 4
  • 36
  • 52
  • I think the command should be corrected as `conda install dnspython` (note that there's no space between dns and python). The library name is `dnspython`. And, for conda, this is the way to go. There's no installation called `pymongo[srv]` when you are in conda... – Romeo Sierra Aug 24 '22 at 20:40
0
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.

MD SHAYON
  • 7,001
  • 45
  • 38
0

None of the existing answers had worked for me. I had to do the following:

sudo apt-get install python3-dnspython

user1145925
  • 971
  • 3
  • 13
  • 24