首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python桌面存储dict

Python桌面存储dict
EN

Stack Overflow用户
提问于 2011-12-18 00:33:18
回答 1查看 166关注 0票数 0

首先,desktopcouch.records.server.CouchDatabase的一个奇怪行为:

db.get_record(id)返回:

代码语言:javascript
复制
<desktopcouch.records.RecordDict object at 0x9198f2c>

db.get_records('mytype', True)返回以下数组:

代码语言:javascript
复制
<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

EN

回答 1

Stack Overflow用户

发布于 2011-12-18 10:52:52

通过查看它的代码,我发现它不是一个普通的dict,但是无论如何您都可以让它变成dict。

试试这个:

代码语言:javascript
复制
print dict(tmp['logs'].items())

编辑:

至于混淆,当您将转换后的dict设置为Record对象时,它将运行

代码语言:javascript
复制
super(Record, self).__setitem__(key, item)

因此,根据其继承,它运行RecordDict对象的__setitem__方法,该方法运行:

代码语言:javascript
复制
super(RecordDict, self).__setitem__(key, item)

同样,请参阅RecordData对象的__setitem__方法,它是:

代码语言:javascript
复制
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。所以你可以看到这些结果:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8548998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档