Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GAE:列表上的NDB查询

GAE:列表上的NDB查询
EN

Stack Overflow用户
提问于 2017-09-29 19:29:10
回答 2查看 395关注 0票数 0

Google App Engine NDB数据模型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Users
    Username
    FirstName
    LastName

Posts
    PostID
    PosterUsername

SubscribedPosts
    PostID
    SubscriberUsername

对于特定的用户,我希望返回该用户订阅的所有帖子,并在页面上显示它们。

由于奇妙的NDB不支持JOIN,我们执行两个查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postIDList = 
SubscribedPosts.query(SubscribedPosts.SubscriberUsername == 'johndoe').fetch()

这给了我们一个SubscribedPosts的列表。那么如何获取我的postIDList列表并将其用作帖子查询的过滤条件呢?

类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
results = Posts.query(Post.PostID IN postIDList.PostID)

在普通的关系数据库中,这是一个使用表连接的简单查询。在Google的ndb中如何做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2017-09-29 20:00:38

如果您试图以在关系数据库中设计表的相同方式来设计数据存储模型,那么您将遇到许多瓶颈。

你的评论可能会朝着一个正确的方向发展,尽管还有其他解决方案。沿着这条路线,我将完全放弃"subscribedPosts“模型,在用户模型中使用重复的KeyProperty实体来存储订阅的帖子。

请参阅相关帖子:One-To-Many Example in NDB

票数 2
EN

Stack Overflow用户

发布于 2017-09-30 07:36:42

似乎您希望建立多对多关系的模型,而不是一对多关系。阅读Modelling Entity Relationships (虽然这是针对较老的db,而不是较新的ndb,但它仍然给出了想法)。

两个实体中的一个应该维护相关其他实体的密钥列表(repeated=True)。哪个实体应该持有该列表?优选地,列表应该在通常具有较少关系的一侧,以便键列表较小。另一个考虑因素是哪一方对更新的争用可能较少。

在您的特定情况下,假设平均用户订阅10个帖子,每个帖子平均有100个用户订阅它。在本例中,我们希望将键列表放在关系的Users端。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Users(ndb.Model):
    user_name = ndb.StringProperty()
    first_name = ndb.StringProperty()
    last_name = ndb.StringProperty()
    posts = ndb.KeyProperty(kind='Posts', repeated=True)

class Posts(ndb.Model)
    post_id = ndb.StringProperty()
    poster_user_name = ndb.StringProperty()

通过添加到Users实例中的列表来建立关系:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
current_user.posts.append(current_post.key)

对于给定的Users实例,获取所有订阅的Posts很容易,因为订阅的Posts的密钥列表已经在给定的Users

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ndb.get_multi(given_user.posts)

对于给定的Posts实例,通过以下方式获取所有订阅的Users

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query = Users.query(Users.posts == given_post.key)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46495723

复制
相关文章
PaaS 调研:GAE与 AWS(上)
韩伟
2017/11/09
2.4K0
PaaS 调研:GAE与 AWS(上)
AppengineJS:JavaScript到GAE
尽管Google没有为App Engine平台开发JavaScript SDK,但是一个名为AppengineJS的GAE Python SDK的新端口可以为GAE构建应用程序,这些应用程序是用所有w
bill_bisheng
2018/01/05
2K0
MySQL NDB Cluster实战
前言 本文来自睿哲科技的张树杰同学分享MySQL NDB集群的基础知识和搭建,非常赞! 希望越来越多的同学一起来分享,帮助他人,也收获成长,每季度分享排名第一的同学有惊
大数据和云计算技术
2018/03/08
4.5K0
MySQL NDB Cluster实战
AppengineJS:用JavaScript来搞GAE
尽管Google没有为他自家的App Engine平台开发JavaScript SDK,但GAE Python SDK的新端口AppengineJS促进了GAE应用程序的构建,这个新家伙使用了所有Web开发人员熟悉的语言编写。该端口在App Engine Java之上使用Rhino(JavaScript的JVM实现),但是该API基于App Engine Python,因为它是JS之类的脚本语言。
code-monkey
2018/01/10
1.2K0
OpenStack用户列表查询
命令语句 openstack user list ID:用户的唯一ID; Name:用户名称
院长技术
2020/06/13
2.3K0
OpenStack项目列表查询
[root@controller ~]# openstack project list ID Name ad8d7966165b4619aab21300e50f7020 service b03aac1f6ae94f7bada2afa8f2064312 admin bdc7f07c4d2c42439d3f4ecb4a3d7b59 myproject
院长技术
2020/06/13
1.1K0
OpenStack角色列表查询
命令语句 openstack role list ID:角色的唯一ID; Name:角色的名称
院长技术
2020/06/13
9010
MySQL NDB Cluster介绍
最近翻译了好几篇关于NDB的文章,相信有很多人会有疑问,NDB Cluster究竟是个什么东西?它是一款新产品吗?它和InnoDB Cluster有什么不同?它是MySQL吗?它怎么使用?在这篇文章里,我将为大家介绍一下MySQL NDB Cluster是什么?它的架构和特征,以及它的适用场景。
MySQLSE
2020/09/28
5.8K0
MySQL NDB Cluster介绍
Python编程 列表的操作(上)
列表是 Python 中最基本也是最常用的数据结构之一,它是一个 有序可重复的元素
网络豆
2022/11/20
7800
Python编程 列表的操作(上)
挑战MySQL NDB Cluster备份/还原问题
问题1:您有一个大型数据库,需要3个小时的备份时间。备份期间将运行插入/更新/删除。如何运行备份,以使备份开始后不会有任何插入/更新/删除操作在备份文件中得到反映?
MySQLSE
2021/03/25
1.1K0
React 列表 & Keys(上)
我们可以将以上实例重构成一个组件,组件接收数组参数,每个列表元素分配一个 key,不然会出现警告 a key should be provided for list items,意思就是需要包含 key:
陈不成i
2021/07/29
8710
SQLAlchemy in 查询空列表问题分析
会发现生成的语句中过滤条件是 WHERE account.id != account.id,使用PostgreSQL Explain ANALYZE 命令,
goodspeed
2020/12/22
1.8K0
SQLAlchemy in 查询空列表问题分析
内购查询不到商品列表
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray * recharges = response.products;
ppppy
2022/11/15
9430
【Python】列表 List ③ ( 查询操作 / 修改操作 | 列表查询操作 List#index | 修改列表指定位置元素值 )
列表 List 查询功能 , 通过 List#index 函数 实现 , 语法如下 :
韩曙亮
2023/10/11
5670
【Python】列表 List ③ ( 查询操作 / 修改操作 | 列表查询操作 List#index | 修改列表指定位置元素值 )
MySQL NDB CLUSTER 8.0正式发布!
MySQL的NDB CLUSTER开发团队宣布NDB Cluster 8.0 正式发布。
MySQLSE
2020/09/28
1.4K0
WPF 鼠标移动到列表上 显示列表图标
Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsMouseOver, Converter={StaticResource BooleanToVisibilityConverter}}"
林德熙
2018/09/18
2.5K0
WPF 鼠标移动到列表上 显示列表图标
WPF 鼠标移动到列表上 显示列表图标
Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, Path=IsMouseOver, Converter={StaticResource BooleanToVisibilityConverter}}"
林德熙
2022/08/04
1.7K0
PaaS 调研 : GAE 与 AWS (下)
本文介绍了PaaS云服务在实际业务中的应用,并分析了PaaS云服务的优点和缺点。作者认为PaaS云服务具有高度灵活性、可扩展性、成本效益和高效性等优点,但同时也存在一些缺点,如技术难度高、实施复杂、依赖第三方服务、需要投入较多资源等。在实际应用中,PaaS云服务需要根据业务需求和场景,选择合适的架构和技术方案,并注意维护、监控和优化云服务。
韩伟
2017/11/10
2.5K0
PaaS 调研 : GAE 与 AWS (下)
GAE、SAE、BAE 对比分析
目前,云服务很多,例如GAE、BAE、SAE、TAE、CAE、ACE、EC2、AZURE各种云。本文主要从以下几个方面对GAE、SAE和BAE的优劣进行分析。
阳光岛主
2019/02/19
3.8K0
Activiti7 查询用户任务列表
package com.itheima.activiti; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.runtime.ProcessInstance; impor
彼岸舞
2020/09/30
1.3K0

相似问题

GAE ndb查询!=标签

12

GAE ndb查询排除实体

28

gae ndb查询多个值

22

GAE ndb和查询配额限制

13

GAE ndb对用户对象的查询

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文