Debería poder escapar de la contraseña usando urllib.quote() . Aunque solo debe citar/escapar la contraseña y excluir el username:;de lo contrario el : también se escapará en %3A .
Por ejemplo:
import pymongo
import urllib
mongo_uri = "mongodb://username:" + urllib.quote("example@sqldat.com") + "@127.0.0.1:27001/"
client = pymongo.MongoClient(mongo_uri)
El fragmento anterior se probó para MongoDB v3.2.x, Python v2.7 y PyMongo v3.2.2.
El ejemplo anterior asumido en la cadena de conexión URI de MongoDB:
- El usuario se crea en el
adminbase de datos. - El anfitrión
mongodejecutándose en 127.0.0.1 (localhost) - El puerto
mongodasignado a es 27001
Para Python 3.x, puede utilizar urllib.parse.quote() para reemplazar caracteres especiales en su contraseña usando %xx escapar. Por ejemplo:
url.parse.quote("example@sqldat.com")