這兩天給新電腦安裝環境后發現之前的代碼不能進行mongodb數據庫用戶認證,報錯如標題所示,查看一番后發現是pymongo的版本問題
在pymongo 3.9版本的時候進行用戶認證代碼如下:
self.client = pymongo.MongoClient(host="127.0.0.1", port=27017) self.client["admin"].authenticate("admin", "12345678")
在pymongo 3.9及以前是可以正常運行的,能夠進行用戶認證,當我升級到4.0后報錯如下
Traceback (most recent call last): File "/Users/zzq/PycharmProjects/downloads_data/mongo_utils.py", line 34, in <module> mongo = Mongo() File "/Users/zzq/PycharmProjects/downloads_data/mongo_utils.py", line 13, in __init__ print(self.client["admin"].authenticate("admin", "12345678")) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pymongo/collection.py", line 2579, in __call__ raise TypeError("'Collection' object is not callable. If you " TypeError: 'Collection' object is not callable. If you meant to call the 'authenticate' method on a 'Database' object it is failing because no such method exists.
查看官方文檔后發現解釋如下:
這里其實寫的很明白了,在新版本中移除了之前的認證方式,變成了實例化時輸入用戶名和密碼參數,所以我的代碼也隨之更新為:
self.client = pymongo.MongoClient(host="127.0.0.1", port=27017,username="admin",password="12345678") # 地址 端口 用戶名 密碼
如果不知道自己的pymongo是什么版本可以使用pip3 list -v或者 pip list -v進行查看,視自己的情況選擇
除了改寫代碼,還可以通過降級pymongo為3.9 也能使代碼正常運行,先使用pip3 uninstall pymongo 輸入y進行刪除,然后再次安裝時指定pymongo的版本為3.9: pip3 install pymongo==3.9
如我寫的有問題還請大家指出