Insert python object in mongodb

Folks, I just spent a lot of time trying to figure it out - I have to miss something basic.

I have a python object, all I want to do is insert this object into mondodb.

This is what I have:

from pymongo import Connection
import json

conn = Connection()
db = conn.cl_database
postings = db.postings_collection

class Posting(object):
    def __init__(self, link, found=None, expired=None):
        self.link = link
        self.found = found
        self.expired = expired

posting = Posting('objectlink1')
value = json.dumps(posting, default=lambda x:x.__dict__)
postings.insert(value)

causes this error:

Traceback (most recent call last):
  File "./mongotry.py", line 21, in <module>
postings.insert(value)
  File "build/bdist.macosx-10.7-intel/egg/pymongo/collection.py", line 302, in insert
  File "build/bdist.macosx-10.7-intel/egg/pymongo/database.py", line 252, in _fix_incoming
  File "build/bdist.macosx-10.7-intel/egg/pymongo/son_manipulator.py", line 73, in transform_incoming
TypeError: 'str' object does not support item assignment

This seems to be because json.dumps () returns a string.

Now, if I really do load the value before inserting it, it works fine:

posting = Posting('objectlink1')
value = json.dumps(posting, default=lambda x:x.__dict__)
value = json.loads(value)
postings.insert(value)

What is most straightforward for this?

Thank!

+5
source share
2 answers

What is valuein your source code?

This must dictnot be an instance of the class.

This should work:

postings.insert(posting.__dict__)
+10
source

. : http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

, , - . . . json.dumps json. , dict, json .

, :

postings.insert({ "": "" })

dict, , . json.dumps.loads(), dict.

+2