MongoEngine cannot connect through Atlas Uri string. Tried everything

Question:

I’m new to programming and am building my first app.. I’m building a kivy app trying to use mongoDB as the database. I can connect to a localhost to query and create documents. I cannot get it to connect to the atlas no matter what I try. I’m also using Pycharm and a venv.

Heres the basic info:


import pymongo
from pymongo.server_api import ServerApi
import mongoengine as mongo
import ssl

data = 'events'
username = 'admin'
password = 'abc123'
host_name = 'mongodb+srv://events.xfmhxnj.mongodb.net'
uri = f'mongodb+srv://{username}:{password}@events.xfmhxnj.mongodb.net/'

mongo.connect(db=db,
              username=username,
              password=password,
              host=host_name)


class Obj(mongo.Document):
    name = mongo.StringField(required=True)


div = Obj()
div.name = 'test'
div.save()

which gives me this error: raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-liums0m-shard-00-00.xfmhxnj.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

Then i looked up this error and found someone recommended:

mongo.connect(db=db,
              username=username,
              password=password,
              host=host_name,
              ssl=True,
              ssl_cert_reqs=ssl.CERT_NONE,)
)

error: raise ConnectionFailure(f"Cannot connect to database {alias} :n{e}") mongoengine.connection.ConnectionFailure: Cannot connect to database default : Unknown option ssl_cert_reqs

I don’t understand why its an unknown option. pymongo has it listed in the example.
https://api.mongodb.com/python/3.3.0/examples/tls.html

I’ve also tried the string straight from Atlas:

client = pymongo.MongoClient(f"mongodb+srv://{username}:{password}@events.xfmhxnj.mongodb.net/?retryWrites=true&w=majority", server_api=ServerApi('1'))
db = client.test
client.server_info()

error: raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-liums0m-shard-00-01.xfmhxnj.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

or if i just paste in the uri string from compass

mongo.connect('mongodb+srv://admin:[email protected]/test')

error: raise InvalidName("database names cannot contain the character %r" % invalid_char) pymongo.errors.InvalidName: database names cannot contain the character '.'

any help is super appreciated! I feel like i’ve tried every combination of connection settings. This is the last thing i need before pushing my app to x-code

Asked By: cryptotheo

||

Answers:

Have you tried using MongoClient(connection_string, tlsCAFile=certifi.where()) ?

Certifi provides Mozilla’s carefully curated collection of Root
Certificates for validating the trustworthiness of SSL certificates
while verifying the identity of TLS hosts.

Before testing the new code remember to do "pip install certifi".

Answered By: Tommaso Ventafridda