Подтвердить что ты не робот

Объект Collection не является вызываемой ошибкой с PyMongo

Следуя вдоль PyMongo tutorial, я получаю сообщение об ошибке при вызове метода 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.

Есть несколько сообщений в Интернете, которые обсуждают эту ошибку, но все, похоже, когда пользователь вызывает устаревшее имя.

Любые указания относительно того, что я делаю неправильно здесь?

4b9b3361

Ответ 1

Это однозначный вопрос, но проблема здесь в том, что вы читаете из бета-версии документации по выпуску, но, по всей вероятности, у вас на самом деле больше всего есть" pymongo "2.8, а не" 3.0b ", упомянутый в ссылке, которую вы указываете.

В учебном пособии 2.8 вместо .insert() указывается

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

Так как .insert_one() доступен только в драйвере 3.0b.

Либо принудительно установить драйвер "бета", либо жить со стабильным драйвером и доступными методами.

Это, по-видимому, является ошибкой текущего "ответа поисковой системы", соответствующего "бета-версии" как "текущей".

Ответ 2

Проблема в том, что вы следуете руководству из текущей документации по выпуску, но на самом деле есть PyMongo 2.8.

Метод insert_one() является новым в PyMongo 3.0, теперь включенном в PyMongo 2.9. Так что вам нужно будет установить PyMongo 2.9 или более новую версию, чтобы использовать новую функцию API.

Вы можете установить или обновить драйвер, используя pip.

python -m pip install -U pymongo

Ответ 3

У меня тоже была проблема. Когда я попробовал обновить дистрибутив PyMongo с помощью команды,

pip install -U pymongo

Я получил следующую ошибку:

error: не удалось создать '/usr/local/lib/python2.7/dist-packages/pymongo': Permission denied

По-видимому, в моем дистрибутиве установщик не смог создать библиотеку в папке dist-packages из-за недостаточных прав доступа. Итак, я решил проблему, предоставив права на запись и перезагрузив драйвер PyMongo:

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

Надеюсь, что это поможет.