【发布时间】:2016-06-02 15:26:52
【问题描述】:
从版本 0.10.0 升级到 0.10.6 后,我在使用 mongoengine Documentinstance 的 _data 属性时遇到了一些问题
我定义了一个继承自Document的类
from mongoengine import *
__all__ = ('User',)
connect('mydb')
class User(Document):
user_id = IntField(unique=True)
username = StringField()
meta = {'indexes': ['user_id','username'],
'index_background' : True}
到目前为止,我使用的是mongoengine 0.10.0版
为了访问Userinstance 的数据字典,我曾经处理_dataattribute。
In [1]: User.objects.first()._data
Out[1]:
{'id':ObjectId('55b6290a10976a2a0908f8a3'),
'user_id': 1,
'username': "fake_user"}
In [15]: type(User.objects.first()._data)
Out[15]: dict
现在,我将mongoengine的版本升级到了0.10.6版
In [2]: User.objects.first()._data
Out[2]:
{"id": 'id',
"user_id": 'user_id',
"username": 'username'}
In [2]: type(User.objects.first()._data)
Out[2]: mongoengine.base.datastructures.SpecificStrictDict
所以_dataattribute 不再是dict 类型,当我尝试将用户列表存储在pandas.DataFrame 中时,我的代码会中断:
df = pandas.DataFrame([u._data for u in User.objects])
我在 mongoengine 更改日志文档 here 中找不到任何解释
谁能解释一下这是什么mongoengine.base.datastructures.SpecificStrictDict?以及它是如何工作的?
【问题讨论】:
-
看看this的回答。但本质上,以单个下划线为前缀的名称并不打算被其他代码使用,它们是一个实现细节,它们的使用可能会改变和破坏您的代码(如您所见)。恐怕这无济于事,但确实可以说明为什么会发生这种情况。
标签: python python-2.7 mongoengine