Python 在结构化属性上使用过滤器的NDB查询是否也重复?
我正在创建一个示例应用程序,该应用程序存储用户详细信息及其类信息 使用的模态类别包括: 用于保存用户类数据的模型类 用户模型类 我能够成功地将数据存储到数据存储中,还可以使用一些基于电子邮件id和用户名的过滤器对MyUser实体进行简单查询 但是,当我试图从MyUser模式的结构化属性(即my_数据)中使用filter对属性查询MyUser结果时,它不会给出正确的结果 我想我问错了。 这是我的查询函数 基于重复结构属性进行查询的函数 我想获取具有重复结构化属性(my_数据)的实体,该实体应该是一个强度大于30的列表 请帮助我知道我做错了什么 谢谢。对StructuredProperties的查询返回至少一个结构化属性满足条件的对象。如果你想过滤那些属性,你必须在之后再做 像这样的事情应该可以做到:Python 在结构化属性上使用过滤器的NDB查询是否也重复?,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我正在创建一个示例应用程序,该应用程序存储用户详细信息及其类信息 使用的模态类别包括: 用于保存用户类数据的模型类 用户模型类 我能够成功地将数据存储到数据存储中,还可以使用一些基于电子邮件id和用户名的过滤器对MyUser实体进行简单查询 但是,当我试图从MyUser模式的结构化属性(即my_数据)中使用filter对属性查询MyUser结果时,它不会给出正确的结果 我想我问错了。 这是我的查询函数 基于重复结构属性进行查询的函数 我想获取具有重复结构化属性(my_数据)的实体,该实体应该是一
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
查询重复的结构化属性是在您这样做的同时完成的,所以看起来还可以。。。你期望看到什么?你实际上得到了什么?(顺便说一句:您不需要使用ndb。当您查询电子邮件id和我的数据时。强度:并且是默认值)实际上过滤器工作不正常。对于那个特定的MyUser实体,我已经添加了MyData类型的多个结构化属性,正如您在modals中看到的那样。我只需要那些类强度大于30的MyData属性的最终数据。但是当我进行查询时,不会进行任何筛选,我会保存所有MyData属性。第2行中的查询将返回所有
MyUser
对象,这些对象的MyData
属性中至少有一个my_
,且strength>30
(您正在查询MyUser
)。我现在添加了一个答案和完整的代码,以实现您想要的
class MyUser(ndb.Model):
user_name = ndb.StringProperty()
email_id = ndb.StringProperty()
my_data = ndb.StructuredProperty(MyData, repeated = True)
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
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