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. 

在网上有几篇文章讨论这个错误,但是当用户调用一个不赞成使用的名字时,似乎都是这样。

任何指导我在做什么错在这里?

这是一个明确的问题,但这里的问题似乎是,你正在阅读“testing版”的发布文档,但实际上最多只有安装了“pymongo”2.8而不是链接中提到的“3.0b”引用。

2.8发布教程指向.insert()方法:

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

由于.insert_one()仅在3.0b驱动程序中可用。

要么强制安装“testing版”的驱动程序,要么使用稳定的驱动程序和可用的方法。

这似乎是当前“search引擎响应”匹配“testing版”为“当前”的错。

问题是,你正在从当前版本文档的教程,但实际上已经安装了PyMongo 2.8。

PyMongo 3.0中的insert_one()方法是新的,现在在PyMongo 2.9中被反向移植了。 很显然,您将需要安装PyMongo 2.9或更新版本才能使用新的APIfunction。

你可以使用像安装或升级你的驱动程序。

 python -m pip install -U pymongo 

我也面临同样的问题。 当我尝试使用命令升级我的PyMongo发行版时,

 pip install -U pymongo 

我得到了以下错误:

错误:无法创build'/usr/local/lib/python2.7/dist-packages/pymongo':权限被拒绝

显然,在我的发行版中,由于权限不足,安装程序无法在dist-packages文件夹中创build库。 所以,我通过授予它写权限并重新安装PyMongo驱动程序来解决问题:

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

希望这可以帮助。