首先,desktopcouch.records.server.CouchDatabase的一个奇怪行为:
db.get_record(id)返回:
<desktopcouch.records.RecordDict object at 0x9198f2c>db.get_records('mytype', True)返回以下数组:
<Row id='5rMlni6ZYudp5gvSADve1Y', key='mytype', ...>其中db为CouchDatabase('mydb', create=True)
为什么会有这种区别?
这将导致将保存在记录下的dict返回为空dict {},在第一种情况下作为<desktopcouch.records.RecordDict object at 0x9198f2c>,在第二种情况下作为{}。
这在用db.get_record(id)获取它和用db.update_fields(id,record)更新它时出现了一些问题。它抛出“文档”对象,没有属性“读取”
我在哪里做错了?
编辑:
我向桌面CouchDB发布了一个bug,并给出了解释和片段,以便复制此行为https://bugs.launchpad.net/desktopcouch/+bug/905913。
发布于 2011-12-18 10:52:52
通过查看它的代码,我发现它不是一个普通的dict,但是无论如何您都可以让它变成dict。
试试这个:
print dict(tmp['logs'].items())编辑:
至于混淆,当您将转换后的dict设置为Record对象时,它将运行
super(Record, self).__setitem__(key, item)因此,根据其继承,它运行RecordDict对象的__setitem__方法,该方法运行:
super(RecordDict, self).__setitem__(key, item)同样,请参阅RecordData对象的__setitem__方法,它是:
def __setitem__(self, key, item):
if isinstance(item, (list, tuple, dict)):
item = record_factory(item)
if hasattr(item, '_data'):
item = item._data
self._data[key] = item因此,它使用record_factory将您解析的数据集再次转换为RecordDict。所以你可以看到这些结果:)
https://stackoverflow.com/questions/8548998
复制相似问题