クラスオブジェクトをmongodb BSON文字列に変換できるPythonライブラリを知っている人はいますか? 現在、私の唯一の解決策は、クラス オブジェクトを JSON に変換してから、JSON を BSON に変換することです。
7195 次
1 に答える
3
これは、クラス インスタンスをディクショナリに変換し (オブジェクトのフィールドからの Python ディクショナリでbson.BSON.encode
説明されているように) 、結果の dictを使用することで可能になります。__dict__
の値にはメソッドは含まれず、属性のみが含まれることに注意してください。また、このアプローチが直接的に機能しない場合があることにも注意してください。
MongoDB に格納する必要があるクラスがある場合は、独自のコーディングではなく、既存の ORM ソリューションを検討することもできます。これらのリストは、http://api.mongodb.org/python/current/tools.htmlにあります。
例:
>>> import bson
>>> class Example(object):
... def __init__(self):
... self.a = 'a'
... self.b = 'b'
... def set_c(self, c):
... self.c = c
...
>>> e = Example()
>>> e
<__main__.Example object at 0x7f9448fa9150>
>>> e.__dict__
{'a': 'a', 'b': 'b'}
>>> e.set_c(123)
>>> e.__dict__
{'a': 'a', 'c': 123, 'b': 'b'}
>>> bson.BSON.encode(e.__dict__)
'\x1e\x00\x00\x00\x02a\x00\x02\x00\x00\x00a\x00\x10c\x00{\x00\x00\x00\x02b\x00\x02\x00\x00\x00b\x00\x00'
>>> bson.BSON.encode(e)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/bson/__init__.py", line 566, in encode
return cls(_dict_to_bson(document, check_keys, uuid_subtype))
TypeError: encoder expected a mapping type but got: <__main__.Example object at 0x7f9448fa9150>
>>>
于 2013-01-03T19:55:19.727 に答える