Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python桌面存储dict_Python_Dictionary_Nosql_Couchdb_Record - Fatal编程技术网

Python桌面存储dict

Python桌面存储dict,python,dictionary,nosql,couchdb,record,Python,Dictionary,Nosql,Couchdb,Record,首先,DesktopCoach.records.server.CouchDatabase有一个奇怪的行为: db.get\u记录(id)返回: <desktopcouch.records.RecordDict object at 0x9198f2c> 其中db是CouchDatabase('mydb',create=True) 为什么会有这种差异 这导致返回我的dict,该dict在记录下保存为空dict{},在第一种情况下为,在第二种情况下为{} 当使用db.get_记录(id)

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

db.get\u记录(id)
返回:

<desktopcouch.records.RecordDict object at 0x9198f2c>
其中db是CouchDatabase('mydb',create=True)

为什么会有这种差异

这导致返回我的dict,该dict在记录下保存为空dict{},在第一种情况下为
,在第二种情况下为{}

当使用db.get_记录(id)获取它并使用db.update_字段(id,记录)更新它时,会出现一些问题。它抛出“Document”对象没有属性“read”

我哪里做错了

编辑:


我在桌面CouchDB上发布了一个bug,并提供了解释和代码片段来重现这种行为

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

试试这个:

print dict(tmp['logs'].items())
编辑:

至于混淆,当您将转换后的dict设置回
记录
对象时,它会运行

super(Record, self).__setitem__(key, item)
因此,根据其继承,它运行
RecordDict
对象的
\uuu setitem\uuu
方法,该方法运行:

super(RecordDict, self).__setitem__(key, item)
同样,请参见
RecordData
对象的
\uuuu setitem\uuuu
方法,它是:

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\u factory
将解析的dict再次转换为
RecordDict
。所以你看到了这些结果:)

这个
RecordDict
似乎也是一个dict,你能试试吗?@FelixYan谢谢你的回答。尝试什么?当记录具有RecordDict属性时,它无法保存我的记录。一切都与正则{}一起工作。顺便问一下,desktopcpuch是否有API文档?我只找到了看起来很差的。我不太了解它,但你仍然可以尝试
dict()
它,如果它真的是一个dict(显示在它的名称中),那么你会得到一个python dict。我试过了,但也遇到了同样的错误,现在我发现了原因,我更困惑了。看看这段代码和它打印的内容(tmp是desktopcoach.records.Record),这就是原因之一。我希望最后一次打印是{},而不是.Thx,但这给出了相同的结果。我可以转换它,无论是否调用items()方法。但我无法将其分配回我的记录。恐怕我错过了什么,走错了路。我应该找出db.get_record()和db.get_records()返回不同结果(数据类型)的原因。
print dict(tmp['logs'].items())
返回空dict意味着RecordDict实际上是空的,记录到它的代码中。您也可以尝试对RecordDict对象使用其他方法,如
.keys()
,它们也应该返回空列表。关于返回赋值,您可以使用
记录工厂
模块级方法,该方法转换dict,列表或元组到
RecordDict
MergeableList
。但为什么不将值分配给变量(第3行)?!?:)不,是DesktopCoach.records.records
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