如何在 Google 应用引擎数据库中过滤具有空引用的行

2023-12-06

我有一个 Model UnitPattern,它引用另一个 Model UnitPatternSet

e.g.

class UnitPattern(db.Model):
    unit_pattern_set = db.ReferenceProperty(UnitPatternSet)

在我看来,我想显示所有unit_pattern_set引用为None的UnitPatterns,但是查询UnitPattern.all().filter("unit_pattern_set =", None)什么也不返回,尽管我总共有5个UnitPatterns,其中2个有'unit_pattern_set'设置而 3 没有

e.g.

print 'Total',UnitPattern.all().count()
print 'ref set',UnitPattern.all().filter("unit_pattern_set !=", None).count()
print 'ref not set',UnitPattern.all().filter("unit_pattern_set =", None).count()

outputs:

Total 5
ref set 2
ref not set 0

查询 2 和 3 的总和不应该等于查询 1 吗?

原因似乎是我后来添加了引用属性unit_pattern_set,并且这些UnitPattern对象在此之前就已经存在,但是如何过滤这些实体呢?


这在docs:

索引仅包含以下实体 拥有所提到的所有财产 指数。如果一个实体没有 索引引用的属性, 实体不会出现在索引中, 并且永远不会成为 使用索引的查询。

注意 App Engine 数据存储区使 实体之间的区别 不拥有财产和 拥有财产的实体 具有空值(无)。如果你想 每个实体都是一个 查询的潜在结果,您可以 使用分配一个数据模型 默认值(例如 None)为 查询过滤器使用的属性。

就您而言,您有 3 个实体没有unit_pattern_set根本没有设置属性(因为在创建这些实体时模型中没有定义该属性) - 因此这些属性不存在于该实体的数据库表示中,因此该实体不会出现在该实体的索引中此类实体的财产。

丹·桑德森的书谷歌应用程序引擎编程在第 150 页上对此进行了详细解释(不幸的是,在 Google 图书预览中不可用)

要修复您已有的模型,您必须迭代 UnitPattern 上的查询(我尚未测试以下代码,请在对实时数据运行之前检查它):

patterns = UnitPattern.all()
for pattern in patterns:
  if not pattern.unit_pattern_set:
    pattern.unit_pattern_set = None
    pattern.put()

编辑:此外,更新模型的架构本文讨论了将来可用于处理此类架构更改的策略。然而,那篇文章相当老了,它的方法需要网络浏览器不断点击 URL 来触发下一个作业来更新更多记录 - 现在任务队列如果存在,您可以使用一系列任务来进行更改。这关于使用 deferred.defer 的文章有一个您可以利用的框架 - 它执行少量工作,捕获 DeadlineExceededError,并使用处理程序对新任务进行排队,该新任务将在当前任务停止的地方继续执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google 应用引擎数据库中过滤具有空引用的行 的相关文章

随机推荐

  • LINQ to Entities 选择多对多关系中的所有条目

    我有 3 个 MySql 表 Students Classes and StudentsInClasses 实体框架将它们转换为两个实体Student and Class 每个都通过多对多导航属性链接到另一个 例如Student Class
  • 提取两个双引号之间的所有数据

    我正在尝试使用 powershell 正则表达式从 AssemblyInfo cs 文件中提取版本数据 下面的正则表达式是我最好的尝试 但它只能拉动字符串 assembly AssemblyVersion 我已经将这个正则表达式放入几个网络
  • 詹金斯的空手道选项

    我正在尝试运行来自詹金斯的代码 在目标和选项中给出特定标签 但它失败并出现以下错误 您能否验证语法并让我知道如何解决此问题 无法在项目 karate boilerplate 上执行目标 org apache maven plugins ma
  • 使用 Pcap 进行超时监听

    我想在 Linux 上使用 C 语言的 Libpcap 编写一个小应用程序 目前 它开始嗅探并等待数据包 但这并不是我真正需要的 我希望它等待 N 秒然后停止监听 我怎样才能做到这一点 这是我的代码 void got packet u ch
  • 如何按常见项目对元组进行分组并查找每组的平均值

    我有一个名为的元组列表data data A 2 B 2 B 4 B 6 B 8 B 6 B 4 B 3 C 10 C 10 C 10 D 12 E 12 F 10 F 8 F 6 average 我想要每个相同字母的平均值 预期输出 av
  • 线程之间的 Qt 连接类型:为什么会这样?

    在尝试使多摄像头系统与处理不同摄像头的不同线程一起工作时 我无法使信号和插槽在不同线程之间正常工作 我知道发送信号的对象和相关槽的对象位于不同的线程中 因此我知道我可能只需要为连接找到合适的 连接类型 参数 最终 我发现只有使用 Qt Di
  • 单独元素的边距如何影响固定元素的位置?

    我有两个独立的DIVs one position fixed用于通知栏 一个用于主容器 当我给出container some margin top 这也推送了我的通知栏 这是一个小提琴 http jsfiddle net Zh9k8 2 而
  • 将 OpenStreetMaps 与 Cordova 集成

    我想知道你们是否知道如何将开放街道地图 OSM 与科尔多瓦一起使用 这几天都在找 我能得出的结论是 我不应该直接使用 OSM 的 API 因为如果我有太多调用 他们的服务器会阻止我 所以有免费的开源名称 例如 1 Openlayers 2
  • Android 4.4.2 仅在完整的 Java 代码动画期间在视图对象边界外部创建黑色遮罩

    在这方面确实需要一些帮助 请看一下这个简单的 ImageView 淡入动画 使用完整的 java 代码 使用 API 21 18 17 16 重新创建它 效果非常好 现在尝试使用 API 19 android 4 4 2 创建有趣的掩码 参
  • Highcharts 仪表使工具提示可见并居中

    当屏幕大小调整时 我无法让 Highcharts 仪表的牙尖出现并保持可见并在仪表内居中 在我的小提琴中 您可以看到工具提示出现 然后在一小段时间后消失 此外 当调整窗口大小时 它不会保留在仪表的中心 任何帮助表示赞赏 我的JSFIDDLE
  • Flutter 将文件作为流读取

    我希望用户在文本字段中输入文本 当用户单击 fab 时 文本将作为新行写入文件 附加 我希望我的应用程序读取文件的内容 并将每一行显示为列表视图中输入文本字段下方的列表图块 当用户输入新文本时 该文本应立即出现在列表视图中 我能够将文本写入
  • 使用资源适配器调用大型机的 Jboss CICS 交互

    我已经在 J boss EAP 6 2 上安装了 cicseci rar 该资源适配器是从下载的http www 01 ibm com support docview wss uid swg24008817 sthash 3k4M8smo
  • 在不知道结构的情况下以通用方式读取 xml 文件/字符串

    我想将 XML 层次结构读入内存对象树中 XML 树可以有 n 层子级 我不知道确切的数字 我的内存中对象具有要绑定到树控件的子属性和父属性 当我不知道 xml 元素标签是如何准确调用 写入时 如何以通用方式将 xml 文件 字符串读取到内
  • 谁能解释一下 MySQL 外键

    我知道它们是什么 我的问题是 如何链接它们 或者当您在不同的表中具有相同的名称时它们是否会自动链接 这是一个例子 假设我有一个 orders 表和一个 customer 表 orders 表中的每一行都有一个 customer id 编号
  • QUIC 流量生成

    我想知道这个社区中是否有人知道 找到一种模拟 QUIC 流量配置文件的方法 为了通过 WLAN WiFi 分析 模拟 youtube 我想知道是否有像 iperf 这样方便的软件包 谢谢 巴拉特 CP 目前还没有任何模拟框架可用于测试 QU
  • 如何在颤动中添加选项卡顶部和底部

    顶部选项卡仅显示主页 并且通过滚动或点击显示 3 个不同的页面 底部选项卡则显示整个应用程序 如菜单 当我编写代码时 我会得到如下图所示的视图 但我无法点击或重定向页面 导航代码我只给出了顶部或底部选项卡 而不是两个选项卡 主页 dart
  • 使用 JavaScript 进行表单验证?

    我正在尝试使用 JavaScript 进行表单验证 但是我似乎没有得到任何响应 甚至没有收到警报 即使它在那里
  • user.admin 在哪里?在 Rails-devise-pundit 入门应用程序中定义?

    I used RailsApps Rails composer创建一个 Rails devise pundit 入门应用程序 我对 Ruby on Rails 还有点陌生 对 pundit 和 Rails 4 的设计也比较陌生 我正在查看代
  • 如何在android搜索栏中添加数字刻度?

    我正在尝试使用内部具有数字比例的自定义搜索栏 但不起作用 该搜索栏必须支持所有屏幕分辨率 我怎样才能做到这样 请提出您的宝贵意见 我的custom seekbar xml
  • 如何在 Google 应用引擎数据库中过滤具有空引用的行

    我有一个 Model UnitPattern 它引用另一个 Model UnitPatternSet e g class UnitPattern db Model unit pattern set db ReferenceProperty