【问题标题】:How can I test the validity of a ReferenceProperty in Appengine?如何在 Appengine 中测试 ReferenceProperty 的有效性?
【发布时间】:2011-10-03 15:02:37
【问题描述】:

我目前正在测试我编写的一个小型应用程序。我在确保我的数据存储中的数据是一致的方面没有足够小心,现在我有一个问题,我有一些记录引用不再存在的对象。更具体地说,我有一些具有已分配值的 ReferenceProperty 的对象;引用的对象已被删除,但引用仍然存在。

我想在我的代码中添加一些检查,以确保引用的对象存在并采取相应措施。 (当然,我还需要清理我的数据)。

一种方法是尝试获取()它;但是,这可能应该检索整个对象 - 我想要一种仅测试对象是否存在的方法,理想情况下,只会导致数据存储上的键操作成本,而不是完整的实体读取。

所以,我的问题如下:是否有一个简单的机制来测试给定的 ReferenceProperty 是否有效,它只涉及密钥访问操作(而不是完整的实体获取操作)?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    这将在不返回实体的情况下测试密钥是否存在:

    db.Query(keys_only=True).filter('__key__ =', test_key).count(1) == 1

    我不确定它在计算上是否比获取实体便宜。

    【讨论】:

    • 谢谢 - 它看起来有点重。我希望有一些更轻的东西。如果其他人可以提出更简洁的变体,我会将问题留得更久。
    • Drew 的解决方案其实很简单。 keys_only 查询比获取实体更快。
    • 谢谢戴夫。当然——毕竟这是问题的重点。我的意思是沉重的意思是它似乎有相当多的活动部件,用于看起来相当基本/基本的操作。
    • 只需在其中输入一个“def keyExists(test_key):”和一个“return”,一切就绪……
    • @DaveW.Smith 我不肯定这种情况 - 这当然取决于实体的复杂性。不过,我希望看到基准以一种或另一种方式展示它。
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2010-09-28
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多