我在mongoengine.Document
之上定义了dbSMS
类,如下所示(我将mongoengine
导入为db
):
class dbSMS(db.Document):
sender = db.StringField(max_length=12, required=True)
target = db.StringField(max_length=12, required=True)
message = db.StringField(max_length=255, required=True)
status = db.StringField(required=False)
meta = {
'collection': 'sms',
}
def __init__(self, *args, **kwargs):
super().__init__(args, kwargs)
当我手动创建这个类的新对象时,我可以访问它的成员。但当我试图查询这个类的特定对象的数据库时,它会返回一些。。。嗯,很奇怪。 这是我用来查询数据库和打印结果内容的代码:
self.buffer = dbSMS.objects(sender__in = self.phones, status = 'on hold')
for sms in self.buffer:
print("dbSMS type: {}".format(type(sms)))
print("dbSMS sender {}".format(sms.sender))
print("dbSMS target {}".format(sms.target))
print("dbSMS message {}".format(sms.message))
它应该返回几个包含成员及其值的dbSMS对象,但输出如下:
dbSMS type: <class 'sms.dbSMS'>
dbSMS sender ()
dbSMS target {'sender': '+79000000000', 'message': 'Тест', '_updated': datetime.datetime(2018, 6, 26, 13, 19, 29), '__only_fields': [], '__auto_convert': False, '_created': datetime.datetime(2018, 6, 26, 13, 19, 29), '_etag': '2132f429984474ccb9755e021a1fbe4c6823ab01', 'target': '+79000000000', 'id': ObjectId('5b323d61e13823081b1db7ff'), 'status': 'on hold'}
dbSMS message None
如您所见,返回对象的类型确实是dbSMS,但是当我尝试访问其成员时,它会给我空tuple、dict和成员及其值,而没有。 Mongoengine documantation声明:
The QuerySet object may be iterated over to fetch documents from the database
因此,我希望看到我定义的类的对象。你知道吗
那么,我做错了什么?也许我用错误的方式定义了dbSMS
类,或者我没有理解dbSMS.objects
到底做了什么?你知道吗
是的,原来我定义
dbSMS
的方法不对。QuerySet返回给我args
和kwargs
,我在__init__
中完全忽略了它们,只是盲目地将它们传递给父类。下面是它现在的工作原理:我彻底摆脱了整个
__init__
,并将父类更改为DynamicDocument
(因为我可能需要这种可伸缩性)。现在它完全按照预期工作。你知道吗希望我愚蠢的错误能帮助别人。你知道吗
相关问题 更多 >
编程相关推荐