gpt4 book ai didi

python - Google App Engine for Python 中的引用文献列表

转载 作者:IT老高 更新时间:2023-10-28 21:03:05 26 4
gpt4 key购买 nike

在 Google App Engine 中,有一个 ListProperty 这样的东西,它允许您保存项目的列表(数组)。您还可以指定所持有项目的类型,例如字符串、整数或其他。

Google App Engine 还允许您拥有 ReferenceProperty。 ReferenceProperty “包含”对另一个 Google App Engine 模型实体的引用。如果您访问 ReferenceProperty,它将自动检索引用指向的实际实体。这很方便,因为它胜过获取 key ,然后获取所述 key 的实体。

但是,我没有看到任何诸如 ListReferenceProperty(或 ReferenceListProperty)之类的东西。我想保存一个对其他实体的引用列表,当我尝试访问列表中的元素时会自动解析。我能得到的最接近的似乎是保存一个 db.Key 对象列表。我可以使用这些键然后从服务器手动检索它们的关联实体。

有什么好的解决办法吗?基本上,我希望能够拥有对其他实体的(自动取消引用)引用的集合。我几乎可以通过收集其他实体的键来达到目标​​,但我希望它“知道”这些是关键项,并且它可以取消引用它们作为对我的服务。

谢谢

最佳答案

第一步:

使用 db.ListProperty(db.Key) 创建关系。您希望 ListProp 位于多对多关系中引用较少的实体上。这也将为您提供反向引用。所以:

class Spam
prop1 = db.String
eggs = db.List

class Eggs
prop1 = db.string
@property
def spams(self):
return Spam.all().filter('eggs', self.key())

这提供了两种方式的引用。

第二步:

创建一个取消引用属性的实用方法。

def prefetch_refprops(entities, *props):
"""Dereference Reference Properties to reduce Gets. See:
http://blog.notdot.net/2010/01/ReferenceProperty-prefetching-in-App-Engine
"""
fields = [(entity, prop) for entity in entities for prop in props]
ref_keys = [prop.get_value_for_datastore(x) for x, prop in fields]
ref_entities = dict((x.key(), x) for x in db.get(set(ref_keys)))
for (entity, prop), ref_key in zip(fields, ref_keys):
prop.__set__(entity, ref_entities[ref_key])
return entities

用法如下:

derefrenced_spams = prefetch_refprops(Spams, models.Spam.eggs)    

关于python - Google App Engine for Python 中的引用文献列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719700/

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