簡體   English   中英

集合 object 不是 PyMongo 的可調用錯誤

[英]Collection object is not callable error with PyMongo

按照 PyMongo教程進行操作,在對集合調用insert_one方法時出現錯誤。

In [1]: import pymongo

In [2]: from pymongo import MongoClient

In [3]: client = MongoClient()

In [4]: db = client.new_db

In [5]: db
Out[5]: Database(MongoClient('localhost', 27017), u'new_db')

In [6]: posts = db.posts

In [7]: posts.insert_one({'a':1})
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-2271c01f9a85> in <module>()
----> 1 posts.insert_one({'a':1})

C:\Anaconda\lib\site-packages\pymongo-2.8-py2.7-win32.egg\pymongo\collection.py in __call__(self, *a
rgs, **kwargs)
   1771                         "call the '%s' method on a 'Collection' object it is "
   1772                         "failing because no such method exists." %
-> 1773                         self.__name.split(".")[-1])

TypeError: 'Collection' object is not callable. If you meant to call the 'insert_one' method on a 'Collection' object it is failing because no such method exists.

網上有一些帖子討論了這個錯誤,但似乎都是在用戶調用已棄用的名稱時發生的。

關於我在這里做錯了什么的任何指導?

這是一個明確的問題,但這里的問題似乎是你正在閱讀“beta”發布文檔,但很可能你實際上最多安裝了“pymongo”2.8而不是鏈接中提到的“3.0b”引用。

2.8版本教程指向.insert()方法:

posts.insert({'a':1})

由於.insert_one()僅在3.0b驅動程序中可用。

要么強制安裝“beta”驅動程序,要么使用穩定的驅動程序和可用的方法。

這似乎是當前“搜索引擎響應”的錯誤,將“beta版本”與“當前”匹配。

問題是您正在遵循當前發行版文檔中的教程,但實際安裝了PyMongo 2.8。

insert_one()方法是PyMongo 3.0中的新方法,現在在PyMongo 2.9中向后移植。 很明顯,您需要安裝PyMongo 2.9或更新版本才能使用新的API功能。

您可以使用pip來安裝或升級驅動程序。

python -m pip install -U pymongo

我也遇到了同樣的問題。 當我嘗試使用命令升級我的PyMongo發行版時,

pip install -U pymongo

我收到以下錯誤:

錯誤:無法創建'/usr/local/lib/python2.7/dist-packages/pymongo':權限被拒絕

顯然,在我的發行版上,由於權限不足,安裝程序無法在dist-packages文件夾中創建庫。 所以,我通過授予寫權限並重新安裝PyMongo驅動程序來解決問題:

cd /usr/local/lib/python2.7/
sudo chmod 0777 dist-packages
pip install -U pymongo

希望這可以幫助。

在集合上調用更新時出現此錯誤。 下雪了:

from pymongo import MongoClient

db = MongoClient('localhost', 27017).my_db_name
db.my_collection_name.update_one( ... )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM