谷歌应用引擎添加索引

2024-10-01 17:28:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个googleappengine类(在Python中),其中的字段是\u admin,但没有索引。我们希望它现在被索引,这样我们就可以过滤用户的角色-管理员或不是管理员(是\行政真假)。最初的课程是这样的:

class DomainUser(db.Expando, ExpandoEntity, SocialIconsEntity):
    """
    User domain DB Model
    """
    domain = db.StringProperty(required=True)
    ...
    is_admin = db.BooleanProperty(default=False, indexed=False)
    ...

我改成这样:

    class DomainUser(db.Expando, ExpandoEntity, SocialIconsEntity):
    """
    User domain DB Model
    """
    domain = db.StringProperty(required=True)
    ...
    is_admin = db.BooleanProperty(default=False)
    ...

但我在文档中看到,我们必须再次保存每个对象,以便创建索引。是否可以在不保存所有对象的情况下创建索引?我们按特定域筛选所有用户,然后按is\ u admin字段筛选(或排序)。我们能给index.yaml添加一个索引吗?目前,如果我们过滤用户的是\管理然后我们收到一个空的结果


Tags: 用户falsedbmodeladminisdomain管理员
1条回答
网友
1楼 · 发布于 2024-10-01 17:28:55

您列出的两个选项几乎就是您的全部:

  1. 使用索引:在删除indexed=False的情况下重新保存所有实体(可能非常昂贵,但只有在存在大量DomainUser实体的情况下才保存一次)

  2. 完全不使用索引:仅按domain属性查询并用python筛选结果(如果每个domain中有大量用户,则每次的开销可能非常大,具体取决于您运行查询的频率),即:

你知道吗 

 all_users = DomainUser.query(DomainUser.domain == 'xxx').fetch()
 admins = [u for u in all_users if u.is_admin]
 users = [u for u in all_users if not u.is_admin]

你需要自己决定哪种选择更便宜/更快,如果这是你想要的

相关问题 更多 >

    热门问题