7

皆さん、私はこれを調べるのにかなりの時間を費やしました-私は基本的な何かを見逃しているはずです。

私はPythonオブジェクトを持っています、私がしたいのはこのオブジェクトをmondoddbに挿入することだけです。

これは私が持っているものです:

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)

このエラーをスローします:

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

json.dumps()が文字列を返すためと思われます。

ここで、挿入する前に値のロードを実行すると、正常に機能します。

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

これを行うための最も簡単な方法は何ですか?

ありがとう!

4

2 に答える 2

15

value最初のコードには何が含まれていますか?

dictクラスインスタンスであってはなりません

これは機能するはずです:

postings.insert(posting.__dict__)
于 2012-04-24T05:53:06.047 に答える
3

コレクションの挿入メソッドを誤用しています。ここで確認してください:http: //api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

挿入する必要があるのはドキュメントです。キーと値を含むdictである必要があります。単に文字列を挿入しようとするのは適切ではありません。json.dumpsは、json形式の文字列を返します。dictを取得するためにそれをダンプするだけの場合は、jsonステップは必要ありません。

ドキュメントの外観を正確に挿入します。

posts.insert({"key": "value"})

または、クラスインスタンスをドキュメントとして保存するdictに直接変換してから、挿入します。それは最終的にあなたに口述を与えるのであなたのjson.dumps.loads()で動作します。

于 2012-04-24T06:01:01.817 に答える