gpt4 book ai didi

python - NDB 查询在结构化属性上使用过滤器,这也是重复的?

转载 作者:行者123 更新时间:2023-12-01 04:47:17 25 4
gpt4 key购买 nike

我正在创建一个示例应用程序,存储用户详细信息及其类信息。

正在使用的模态类是:

用于保存用户类别数据的模型类

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 的列表。

请帮助我知道我哪里做错了。

谢谢。

最佳答案

对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

关于python - NDB 查询在结构化属性上使用过滤器,这也是重复的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29167260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com