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.
このエラーについて説明するオンラインの投稿がいくつかありますが、ユーザーが非推奨の名前を呼び出したときのようです。
ここで私が間違っていることに関するガイダンスはありますか?
明確な質問ですが、ここでの問題は "beta" リリースドキュメントから読んでいるようですが、実際には「3.0b」ではなく「pymongo」2.8引用したリンクで言及されています。
2.8リリースチュートリアル は、代わりに .insert()
メソッドを指します。
_posts.insert({'a':1})
_
.insert_one()
は3.0bドライバーでのみ使用可能です。
「ベータ」ドライバーのインストールを強制するか、安定したドライバーと使用可能な方法でライブします。
これは、「ベータリリース」を「現在」として一致させる現在の「検索エンジンの応答」の欠陥のようです。
問題は、現在のリリースドキュメントのチュートリアルに従っているが、実際にはPyMongo 2.8がインストールされていることです。
insert_one()
メソッドはPyMongo 3.0で新しく追加され、 PyMongo 2.9 にバックポートされました。そのため、新しいAPI機能を使用するには、明らかにPyMongo 2.9以降のバージョンをインストールする必要があります。
pip
likeを使用して、ドライバーをインストールまたはアップグレードできます。
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
お役に立てれば。