python - NDB 按键值查询

标签 python google-app-engine python-2.7 flask google-cloud-datastore

使用 Python NDB 的新手。

我有类似的东西:

class User(ndb.Model):
    seen_list = nbd.KeyProperty(kind=Survey, repeated=True)

class Survey(ndb.Model):
    same = ndb.StringProperty(required=True)

我希望能够查询没有看过某些调查的用户。

我现在正在做的是:
users = User.query(seen_list != 'survey name').fetch()

这不起作用。这样做的正确方法是什么?我应该先查询调查列表以获取具有特定名称的调查键吗? != 部分是否正确?

我找不到任何类似的例子。

谢谢。

最佳答案

不幸的是,如果您的调查是重复的属性,那么它不会那样工作。当您查询重复的属性时,数据存储会尝试列表中的每个条目,如果有一个有效,它将返回该项目。因此,当您说“!= 调查名称 1”时,如果您的列表中至少有一个条目不是“调查名称 1”,即使另一个结果是“调查名称 1”,它也会返回为正数.

如果您来自我所知道的 SQL 背景,这是本能的......解决这个问题的唯一方法是以编程方式进行并评估您的查询返回的那些。它来自这样一个事实,即对于重复值,Big Table 会“压平”您的结果,这意味着它会为您的重复属性中的每个值创建一个条目。因此,当它扫描时,它最终会在您的信息中找到一个“正确”行,从那里获取对象键,然后返回对象。

关于python - NDB 按键值查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317289/

相关文章:

python - 如何从 python 中的文本文件中读取整数值(逐位)

python - 应用程序引擎将图像从 url 保存到 blob 存储

python - 我如何列出目录中的文件夹

python - 将python代码编译成单个exe

java - 谷歌应用程序中的rmi错误

python - 警告 :0 terminating async callback error in cv2

python - 如何在同一文件夹中 reload() .py 文件?

python - Numpy 数组索引行为

python - 将 Scrapy 作为脚本运行时禁用日志

python - 如何在 PIL 中使用 unicode 字符?