我正在创建一个示例应用程序,用于存储用户详细信息及其类信息。
正在使用的模态类是:
class MyData(ndb.Model):
subject = ndb.StringProperty()
teacher = ndb.StringProperty()
strength = ndb.IntegerProperty()
date = ndb.DateTimeProperty()
class MyUser(ndb.Model):
user_name = ndb.StringProperty()
email_id = ndb.StringProperty()
my_data = ndb.StructuredProperty(MyData, repeated = True)
我能够将数据成功存储到数据存储区中,并且还可以使用基于email_id和user_name的一些过滤器在MyUser实体上进行简单查询。
但是当我尝试使用MyUser模式的my_data结构化属性上的属性过滤查询MyUser结果时,它没有给出正确的结果。
我想我的查询不正确。 这是我的查询功能
def queryMyUserWithStructuredPropertyFilter():
shail_users_query = MyUser.query(ndb.AND(MyUser.email_id == "napolean@gmail.com", MyUser.my_data.strength > 30))
shail_users_list = shail_users_query.fetch(10)
maindatalist=[]
for each_user in shail_users_list:
logging.info('NEW QUERY :: The user details are : %s %s'% (each_user.user_name, each_user.email_id))
# Class data
myData = each_user.my_data
for each_my_data in myData:
templist = [each_my_data.strength, str(each_my_data.date)]
maindatalist.append(templist)
logging.info('NEW QUERY :: The class data is : %s %s %s %s'% (each_my_data.subject, each_my_data.teacher, str(each_my_data.strength),str(each_my_data.date)))
return maindatalist
我想获取具有重复结构化属性的实体(my_data)应该是具有强度>的列表。 30.
请帮助我知道我做错了什么。
感谢。
答案 0 :(得分:2)
StructuredProperties 上的查询返回至少一个结构化的满足条件的对象。如果要过滤这些属性,则必须在之后进行。
这样的事情可以解决问题:
def queryMyUserWithStructuredPropertyFilter():
shail_users_query = MyUser.query(MyUser.email_id == "napolean@gmail.com", MyUser.my_data.strength > 30)
shail_users_list = shail_users_query.fetch(10)
# Here, shail_users_list has at most 10 users with email being
# 'napolean@gmail.com' and at least one element in my_data
# with strength > 30
maindatalist = [
[[data.strength, str(data.date)] for data in user.my_data if data.strength > 30] for user in shail_users_list
]
# Now in maindatalist you have ONLY those my_data with strength > 30
return maindatalist