2015-03-11 7 views
38

Idąc wzdłuż PyMongo tutorial otrzymuję błąd podczas wywoływania metody insert_one w kolekcji.Obiekt kolekcji nie może wywołać błędu z PyMongo

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. 

Istnieje kilka postów online, które omawiają ten błąd, ale wszystkie wydają się być, gdy użytkownik wywołuje nieaktualną nazwę.

Jakieś wskazówki dotyczące tego, co robię źle tutaj?

+0

Chciałbym tylko dodać, że jest to przykład tego, co nazywa się tutaj "czystym" przykładem. Monitorowanie to dobrze by było pójść za przykładem. –

+0

To też mi się przydarzyło. Dzięki za ogłoszenie =). – rockerBOO

Odpowiedz

48

Jest to oczywiste pytanie, ale problem tutaj wydaje się, że czytasz z dokumentacji "beta" uwalnianiu ale najprawdopodobniej rzeczywiście co najwyżej mieć „pymongo” 2.8 zainstalowany zamiast „3.0b”, o którym mowa w linku, który cytujesz.

W 2.8 release tutorial wskazuje metody .insert() Zamiast:

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

Od .insert_one() jest dostępna tylko w sterowniku 3.0b.

Wymuszaj instalację sterownika "beta" lub korzystaj ze stabilnego sterownika i dostępnych metod.

Wydaje się, że to wina obecnej "odpowiedzi wyszukiwarki" pasującej do "wersji beta" jako "aktualnej".

+2

Ha, to było, dziękuję kolego. Trzy godziny nigdy nie wrócę ... –

+1

@ strimp099 Nie twoja wina naprawdę. Poczuj swój ból. To tylko "produkt uboczny" zmian wprowadzanych w ostatnim wydaniu MongoDB 3.0. Kierowcy się zmieniają, aby upewnić się, że nadążą. W szczególności chodzi o używanie [Bulk Operations API] (http://docs.mongodb.org/manual/reference/method/Bulk/) przy użyciu określonych metod. –

15

Problem polega na tym, że postępujesz zgodnie z samouczkiem z aktualnej dokumentacji, ale w rzeczywistości masz zainstalowane PyMongo 2.8.

Metoda insert_one() jest nowością w oprogramowaniu PyMongo 3.0, teraz przeniesionym do wersji PyMongo 2.9. Więc wyraźnie musisz zainstalować PyMongo 2.9 lub nowszą wersję, aby móc korzystać z nowej funkcji API.

Możesz zainstalować lub zaktualizować sterownik, używając np. pip.

python -m pip install -U pymongo 
1

Miałem też ten sam problem. Kiedy próbowałem modernizacji mój rozkład PyMongo użyciu komendy

pip install -U pymongo 

mam następujący błąd:

error: could not create '/usr/local/lib/python2.7/dist-packages/pymongo': Permission denied

Podobno na mojej dystrybucji, instalator nie był w stanie stworzyć bibliotekę w dist -packages z powodu niewystarczających uprawnień do uprawnień. Tak więc, I rozwiązać problem poprzez przyznanie uprawnień to napisać i ponowne zainstalowanie sterownika PyMongo:

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

nadzieję, że to pomaga.

Powiązane problemy