使用MongoEngine插入文档触发InvalidName错误,求解决建议
解决MongoEngine插入文档时的InvalidName异常
这个问题我之前也碰到过,核心原因就是MongoDB不允许数据库名称里包含.字符,咱们一步步来排查解决:
先定位问题来源
异常信息database names cannot contain the character '.'已经明确指向数据库名称的问题。你的连接字符串末尾的db-name是合法的(没有.),所以问题大概率出在代码中显式指定的数据库名上——比如你调用connect()方法时额外传了带.的db参数,或者配置文件里的数据库名写错了。检查并修正MongoEngine连接代码
你需要确保所有指定数据库名的地方都不包含.:- 如果直接用连接字符串连接,不要额外指定
db参数(避免覆盖连接字符串里的合法数据库名):from mongoengine import connect # 正确写法:直接使用完整连接字符串 connect(host="mongodb://user:pass@ds042487-a0.mlab.com:42487/db-name") - 如果拆分参数连接,确保
db参数的值是无.的合法名称:connect( db="db-name", username="user", password="pass", host="ds042487-a0.mlab.com", port=42487 )
- 如果直接用连接字符串连接,不要额外指定
检查框架配置(如果用了Flask-MongoEngine等)
如果你是通过框架配置文件来设置MongoEngine的,比如Flask的MONGODB_SETTINGS,一定要确认DB字段没有.:MONGODB_SETTINGS = { 'DB': 'db-name', 'USERNAME': 'user', 'PASSWORD': 'pass', 'HOST': 'ds042487-a0.mlab.com', 'PORT': 42487 }额外排查点
偶尔会出现脚本文件名或项目名被默认用作数据库名的情况(比如脚本叫my.app.py),这时候也会触发这个异常。如果前面的检查都没问题,可以看看代码里有没有默认使用自动生成的数据库名,手动指定合法名称即可。
内容的提问来源于stack exchange,提问作者Mustafa Khalid
相关产品推荐
相关产品推荐

