为什么appengine数据库键的排序方式与字符串不同

时间:2011-09-27 16:18:47

标签: python database google-app-engine

我发现这很有趣,我很想知道为什么db键的排序方式与字符串不同。

如果您在Python开发环境中测试以下示例(对于服务器也是如此),您将看到以下(有些意外)行为

str1 = 'agpyb21hbmNlYXBwchILEglVc2VyTW9kZWwY4-agBgw'
str2 = 'agpyb21hbmNlYXBwchILEglVc2VyTW9kZWwYkoWBBQw'

结果:str < str2TRUE

但是,如果我们执行以下操作

key1 = db.Key(str1)
key2 = db.Key(str2)

结果:key1 < key2FALSE

2 个答案:

答案 0 :(得分:2)

他们在提取运算符中使用不同的排序规则。我想db.Key()具有绑定到DB属性的强大概率。 所以&lt;运营商'看到'不同的数据,第一个是(比方说)基于Ut8源,第二个基于奇怪的数据库整理,其中破折号具有特定含义(未知直到我们可以获得规范)。过去我经历过一些痛苦的过程,在数据库接口上提供大量数据。但国际化本质上是复杂的。

答案 1 :(得分:2)

您要比较的是字符串编码的密钥,这些密钥已通过base64传递,以便作为文本输出安全。 Base64不保留字符串排序。如果您使用base64.urlsafe_b64decode解码它们,它们将按您期望的顺序进行比较。