Estoy usando Python 3.9.5 y PyMongo 3.11.4. La versión de mi base de datos MongoDB es 4.4.6. Estoy usando Windows 8.1
Estoy aprendiendo MongoDB y tengo un clúster configurado en Atlas al que me conecto. Cada vez que intento insertar un documento en una colección, se genera un ServerSelectionTimeoutError , y dentro de sus paréntesis hay varios [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate .
La solución de errores de TLS en los documentos de PyMongo no fue de mucha ayuda, ya que solo brindaban consejos para usuarios de Linux y macOS.
Vale la pena mencionar que si configuro tlsAllowInvalidCertificates=True al inicializar mi MongoClient , todo funciona bien. Eso suena inseguro, y mientras estoy trabajando en un proyecto pequeño, me gustaría desarrollar buenos hábitos y no anular ninguna medida de seguridad, así que espero que haya una alternativa a eso.
De todas las búsquedas que he hecho, supongo que me faltan ciertos certificados o que Python no puede encontrarlos. Investigué el paquete certifi , pero esta parte de los documentos hace que parezca que solo debería ser necesario si estoy usando Python 2.x, que no lo estoy.
Así que sí, estoy un poco atascado en este momento.
Bueno, eventualmente decidí instalar certifi y funcionó.
client = MongoClient(CONNECTION_STRING, tlsCAFile=certifi.where())
Ojalá los documentos fueran un poco más claros al respecto, pero tal vez no me fijé lo suficiente.
En el servidor Flask lo resolví usando:
import certifi app = Flask(__name__) app.config['MONGO_URI'] = 'mongodb+srv://NAME:<PWD><DBNAME>.9xxxx.mongodb.net/<db>? retryWrites=true&w=majority' mongo = PyMongo(app,tlsCAFile=certifi.where()) collection_name = mongo.db.collection_name