如何组合GQL查询

2024-04-16 22:38:48 发布

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

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

GQL不支持“或”查询,所以我需要运行两个查询,将它们(结果)合并,然后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的解决方法。在

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代数的解决方案


Tags: fromidmessagedbbyorderwherequery
1条回答
网友
1楼 · 发布于 2024-04-16 22:38:48

看来是个好办法。appenginedb有它的局限性,它给你留下了很多工作。我注意到您正在使用DB;您考虑过迁移到NDB吗?它是新一代的数据库:https://developers.google.com/appengine/docs/python/ndb/。在

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

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

相关问题 更多 >