Python桌面存储dict
首先,DesktopCoach.records.server.CouchDatabase有一个奇怪的行为: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)
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