pymongo 升级到 3.x.x 造成数据库连接失败

昨晚把博客迁到了新的服务器上,对新服务器环境重新做了配置。

万事俱备后,访问博客地址,浏览器提示访问出错。


检查了后台,错误提示如下:

TypeError: 'NoneType' object has no attribute '__getitem__'

对本地的环境进行了测试,却是一切正常。


从错误提示来看,应该是从 MongoDB 读取数据出错了。

遂在服务器上写码调试,发现是 pymongo 的问题,找不到 Connection 类了。

对比了一下本地、旧服务器和新服务器的 pymongo。

本地和旧服务器上的版本是 2.x.x 的,新服务器上的则是 3.x.x 的。

进入新服务器的 pymongo 目录检查,确实是少了 connection.py 文件。


于是,又跑到 PyPI 上检查,只得到了 pymongo 最新版本的下载链接

再去看 MongoDB 官网安装教程,同样没有找到 2.x.x 版本的下载链接。


想着以后始终是要升级的,就改改代码好了。


之前 pymongo 2.x.x 版本的数据库连接代码:

pymongo.Connection(host, port)[dbName]

现改为 3.x.x 写法:

pymongo.MongoClient(host, port)[dbName]

或者

pymongo.MongoClient(host, port).dbName

问题解决。


关于 3.x.x,在连接数据库时,建议使用字典方式来写,用属性方式写可能会造成驱动失败。

参考:http://api.mongodb.org/python/current/tutorial.html