2015-03-11 11 views
38

Pymongo tutorial के साथ कॉल करने योग्य त्रुटि नहीं है और संग्रह पर insert_one विधि को कॉल करते समय त्रुटि प्राप्त हो रही है।संग्रह ऑब्जेक्ट 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. 

इस त्रुटि पर चर्चा करने वाले कुछ पोस्ट ऑनलाइन हैं लेकिन सभी ऐसा लगता है जब उपयोगकर्ता बहिष्कृत नाम कहता है।

मैं यहां क्या गलत कर रहा हूं पर कोई मार्गदर्शन?

+0

मैं यह भी जोड़ना चाहूंगा कि यह एक उदाहरण है जिसे "स्पष्ट" उदाहरण कहा जाता है। उन निगरानीों का उदाहरण उदाहरण का पालन करना अच्छा होगा। –

+0

यह मेरे साथ भी हुआ। पोस्टिंग के लिए धन्यवाद =)। – rockerBOO

उत्तर

48

यह एक स्पष्ट सवाल यह है कि लेकिन समस्या यह है यहाँ है कि आप "beta" रिलीज प्रलेखन से पढ़ रहे हैं लगता है, लेकिन सभी संभावना में आप वास्तव में अधिक से अधिक है "pymongo" 2.8 "3.0b" के बजाय स्थापित भेजा आपके द्वारा उद्धृत लिंक में।

बजाय .insert() विधि के लिए 2.8 release tutorial अंक:

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

.insert_one() के बाद से 3.0b ड्राइवर में ही उपलब्ध है।

या तो "बीटा" ड्राइवर की स्थापना को मजबूर करें या स्थिर ड्राइवर और उपलब्ध विधियों के साथ लाइव करें।

यह "बीटा रिलीज" से मेल खाने वाले वर्तमान "खोज इंजन प्रतिक्रिया" की गलती है "वर्तमान" के रूप में।

+2

हा वह था, धन्यवाद साथी। तीन घंटे मैं कभी वापस नहीं आ रहा हूं ... –

+1

@ strimp099 वास्तव में आपकी गलती नहीं है। अपने दर्द के लिए महसूस करो। यह हाल ही में मोंगोडीबी 3.0 रिलीज के आसपास जारी किए जा रहे बदलावों का एक "उप-उत्पाद" है। यह सुनिश्चित करने के लिए ड्राइवर्स बदल रहे हैं कि वे बने रहें। विशेष रूप से यह विशिष्ट विधियों के साथ [थोक ऑपरेशंस API] (http://docs.mongodb.org/manual/reference/method/Bulk/) का उपयोग करने के बारे में है। –

15

समस्या यह है कि आप वर्तमान रिलीज दस्तावेज़ से ट्यूटोरियल का पालन कर रहे हैं लेकिन वास्तव में PyMongo 2.8 स्थापित है।

insert_one() विधि Pymongo 3.0 में नया है अब PyMongo 2.9 में बैकपोर्ट किया गया है। तो नई एपीआई सुविधा का उपयोग करने के लिए आपको स्पष्ट रूप से PyMongo 2.9 या नए संस्करण को स्थापित करने की आवश्यकता होगी।

आप pip जैसे अपने ड्राइवर को इंस्टॉल या अपग्रेड कर सकते हैं।

python -m pip install -U pymongo 
1

मुझे भी एक ही समस्या का सामना करना पड़ रहा था। जब मैं आदेश का उपयोग मेरी PyMongo वितरण उन्नयन की कोशिश की,

pip install -U pymongo 

मैं निम्नलिखित त्रुटि मिली:

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

जाहिर है, मेरी distro पर, संस्थापक नहीं जिले में एक पुस्तकालय बनाने के लिए कर रहा था अपर्याप्त अनुमति विशेषाधिकारों के कारण पैकेज फ़ोल्डर। तो, मैं इसे अनुमतियाँ लिखना देने और PyMongo चालक पुन: स्थापित करने से समस्या हल हो:

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

आशा इस मदद करता है।

संबंधित मुद्दे