web-dev-qa-db-ja.com

コレクションオブジェクトは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.

このエラーについて説明するオンラインの投稿がいくつかありますが、ユーザーが非推奨の名前を呼び出したときのようです。

ここで私が間違っていることに関するガイダンスはありますか?

45
Jason Strimpel

明確な質問ですが、ここでの問題は "beta" リリースドキュメントから読んでいるようですが、実際には「3.0b」ではなく「pymongo」2.8引用したリンクで言及されています。

2.8リリースチュートリアル は、代わりに .insert() メソッドを指します。

_posts.insert({'a':1})
_

.insert_one() は3.0bドライバーでのみ使用可能です。

「ベータ」ドライバーのインストールを強制するか、安定したドライバーと使用可能な方法でライブします。

これは、「ベータリリース」を「現在」として一致させる現在の「検索エンジンの応答」の欠陥のようです。

55
Neil Lunn

問題は、現在のリリースドキュメントのチュートリアルに従っているが、実際にはPyMongo 2.8がインストールされていることです。

insert_one() メソッドはPyMongo 3.0で新しく追加され、 PyMongo 2.9 にバックポートされました。そのため、新しいAPI機能を使用するには、明らかにPyMongo 2.9以降のバージョンをインストールする必要があります。

pip likeを使用して、ドライバーをインストールまたはアップグレードできます。

python -m pip install -U pymongo
17
styvane

私も同じ問題に直面していました。コマンドを使用して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

お役に立てれば。

0