【发布时间】:2009-02-23 11:47:23
【问题描述】:
Google App Engine 支持基于键列表google.appengine.ext.db.get(keys) 的提取操作。
我很想知道是否可以保证结果列表保留键的顺序(即键 = [k_1, k_2, k_3] 然后为结果 [@987654325 @, r_2, r_3] 总是正确的 r_i.key() == k_i)。
据我所知,API 通过内部为 IN 中的每个值发出 N 个子选择来执行 IN 选择。我希望 db.keys 会发生这种情况,因此调用将保留键顺序。
无论如何,我不确定,我找不到任何参考表明db.keys 等同于 IN 选择,但如果没有对其执行进行任何优化。否则,解决方法将非常简单(我会迭代并查询自己的每个键,因此我可以保证我不依赖 db.keys 实现)。
我进行了一些基本测试,结果显示:
-
db.get()表现最佳 -
db.get()保留密钥顺序 - 替代品
Model.(始终保证结果顺序)执行速度较慢get_by_id
虽然结果似乎证实了我的假设,但我想知道其他人是否对此进行了调查并得出了相似或不同的结论。
tia, ./亚历克斯
进行更多研究后,我发现了以下内容(db.get() 和 Model.get() 的文档:
如果 ids 是一个列表,则该方法返回一个模型实例列表,当对应的 Key 不存在实体时,该方法返回 None 值。
即使不加下划线,我认为顺序是有保证的。
【问题讨论】:
-
我怎样才能结束这个问题?我想我已经找到了答案。