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.


這兩天給新電腦安裝環境后發現之前的代碼不能進行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.

查看官方文檔后發現解釋如下:

4.0文檔地址:https://pymongo.readthedocs.io/en/stable/migrate-to-pymongo4.html#database-authenticate-and-database-logout-are-removed

 

 這里其實寫的很明白了,在新版本中移除了之前的認證方式,變成了實例化時輸入用戶名和密碼參數,所以我的代碼也隨之更新為:

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

如我寫的有問題還請大家指出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM