Ich habe einige Probleme mit dem _data
Attribute einer mongoengine Document
Instanz nach der Version 0.10.0Mongoengine 0.10.6 _data Attribut Document Instanz
zu 0.10.6 Upgrade definiere ich eine Klasse von Document
vererben
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}
Bisher habe ich mongoengine
Version 0.10.0
um die dict von Daten zugreifen ein User
Beispiel verwendete ich mit derbeschäftigenAttribut.
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
Nun verbessern ich die Version von mongoengine
auf Version 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
So _data
Attribut ist nicht mehr vom Typ dict
und mein Code bricht, wenn ich versuche, eine Liste von Benutzern zu speichern, in ein pandas.DataFrame
Tun:
df = pandas.DataFrame([u._data for u in User.objects])
ich kann keine Erklärung in mongoengine Changelog doc here
Kann mir jemand erklären, was ist das mongoengine.base.datastructures.SpecificStrictDict
? und wie es funktioniert?
Werfen Sie einen Blick auf [this] (http://stackoverflow.com/questions/6930144/underscore-vs-double-underscore-with-variables-and-methods) Antwort. Im Grunde genommen sind Namen, die mit einem einzelnen Unterstrich versehen sind, nicht für andere Codes gedacht, sie sind ein Implementierungsdetail und ihre Verwendung kann sich ändern und Ihren Code beschädigen (wie Sie gesehen haben). Ich fürchte, das hilft nicht, aber wirft Licht darauf, warum das passiert ist. – SiHa