gpt4 book ai didi

python - 如何在 GAE Python 的结构化属性中查询计算属性

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:40 26 4
gpt4 key购买 nike

class Name_score(ndb.Model): 
def get_value_of_name(self, name, date):
# concatenate "X" and date before returning
return_text = "X"+name+str(date)
return return_text

date = ndb.DateTimeProperty()
name = ndb.StringProperty()
# Computed values
name_value_computed = ndb.ComputedProperty(lambda e: e.get_value_of_name(e.name, e.date))

class Activity_db(ndb.Model):
# contains many properties
# removed the not relevant ones here
name_set = ndb.StructuredProperty(Name_score, repeated=True)
hobby = ndb.StringProperty()

NDB 中有很多条目。我想获取特定日期的记录,“name_value_computed”与查询中提供的数据相匹配。
要查询具有特定“name_value_computed”和“date”值的所有此类条目(下面的示例),查询是什么。

示例(条件算法):
(“爱好”是“网球”)和((如果在“日期”“18/01/1900”,“name_value_computed”是“XJohn18/01/1900”)或(如果在“日期”“22/04/1910 ", "name_value_computed"是 "XBran22/04/1910"))
以下是正确的吗:

date_1 = datetime.strptime("18/01/1900", '%d/%m/%Y') 
name_computed_value_1 = "XJohn18/01/1900"
date_2 = datetime.strptime("22/04/1910", '%d/%m/%Y')
name_computed_value_2 = "XBran22/04/1910"
qry_1 = Activity_db.query(ndb.OR(Activity_db.name_set==Name_score(date=date_1, name_value_computed=name_computed_value_1), Activity_db.name_set==Name_score(date=date_2, name_value_computed=name_computed_value_2)), Activity_db.hobby=="tennis")
record_list = qry_1.fetch()

我收到以下错误:

File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 2745, in __init__

self._set_attributes(kwds)

File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 2791, in _set_attributes

prop._set_value(self, value)

File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\ndb\model.py", line 2612, in _set_value

raise ComputedPropertyError("Cannot assign to a ComputedProperty")

ComputedPropertyError: Cannot assign to a ComputedProperty

我提到了 this section Google Python GAE 页面的

最佳答案

似乎没有任何方法可以直接执行此操作,因为您无法显式指定计算属性的值。

我认为最好的办法是将您的计算值存储为 StringProperty,这样该查询就可以工作。您可以使用 pre-put hook 复制计算属性的某些功能。 .当您将实体放入数据存储区时,您的 Hook 可以填充 name_value_computed 字段。

你的模型看起来像这样:

class Name_score(ndb.Model): 
def get_value_of_name(self, name, date):
# concatenate "X" and date before returning
return_text = "X"+name+str(date)
return return_text

def _pre_put_hook(self):
self.name_value_computed = self.get_value_of_name(self.name, self.date)

date = ndb.DateTimeProperty()
name = ndb.StringProperty()
# Computed values
name_value_computed = ndb.StringProperty()

你必须小心,如果你使用这个方法,你需要在访问 name_value_computed 字段之前 put() 你的模型,否则它不会尚未设置。

关于python - 如何在 GAE Python 的结构化属性中查询计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804764/

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