首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何组合GQL查询

如何组合GQL查询
EN

Stack Overflow用户
提问于 2013-07-23 03:22:25
回答 1查看 1.1K关注 0票数 1

因此,我正在为我的应用程序制作一个内部混乱系统。我需要选择用户是发送者或接收者的所有消息。

GQL不支持"OR“查询,所以我需要运行两个查询,组合它们(结果),然后执行ORDER BY created DESC

不幸的是,我找不到任何文档或示例如何在Python中做到这一点。

附言:我的猜测是db.GqlQuery("SELECT * FROM Messages WHERE sender_id = :1 ORDER BY created DESC UNION SELECT * FROM Messages WHERE receiver_id = :1 ORDER BY created DESC", user_id)

PPS。:我使用Python的变通方法。

代码语言:javascript
复制
def get_messages(user_id):
    sender_query = db.GqlQuery("SELECT * FROM Messages WHERE sender_id = :1 ORDER BY created DESC", user_id)
    receiver_query = db.GqlQuery("SELECT * FROM Messages WHERE receiver_id = :1 ORDER BY created DESC", user_id)

    message_query = []

    for q in sender_query:
        message_query.append(q)

    for q in receiver_query:
        if q not in message_query: #doesn't work if user sent a message to himself (different instaces of same entity)
            message_query.append(q)

    message_query.sort(key=operator.attrgetter('created'))

    return message_query

仍在寻找GQL代数形式的解决方案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 09:56:59

看起来是个不错的解决方案。App Engine DB有它的局限性,它给你留下了很多工作。我注意到您正在使用DB;您是否考虑过迁移到NDB?它是下一代DB:https://developers.google.com/appengine/docs/python/ndb/

NDB解决了DB的许多缺点。首先,它支持"OR“查询,甚至支持and和OR:https://developers.google.com/appengine/docs/python/ndb/queries#nest_and_or的嵌套组合

如果您发现自己正在花费大量时间编写代码,只是为了在DB上执行基本查询,那么迁移可能是一项不错的投资。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17795700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档