Почему ключи базы данных appengine сортируются иначе, чем строки - PullRequest
2 голосов
/ 27 сентября 2011

Мне показалось это интересным, и мне любопытно узнать, почему ключи db упорядочены не так, как строки.

Если вы протестируете следующий пример в среде разработки Python (верно и для сервера), вы будетеувидеть следующее (несколько неожиданное) поведение

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

Результат: str < str2 is TRUE

Однако, если мы сделаем следующее

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

Результат:key1 < key2 это FALSE

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

То, что вы сравниваете, это строковые ключи, которые были переданы через base64, чтобы быть безопасными для вывода в виде текста. Base64 не сохраняет порядок строк. Если вы декодируете их, используя base64.urlsafe_b64decode, они будут сравниваться в том порядке, в котором вы ожидаете.

2 голосов
/ 27 сентября 2011

Они используют другое сопоставление в операторе извлечения. Я предполагаю, что db.Key () имеет сильные вероятности для привязки к свойствам БД. Таким образом, <оператор «видит» разные данные, первый из которых (скажем) основан на источнике Ut8, а второй - на основе некоторого странного сопоставления БД, где тире имеет конкретное значение (неизвестно, пока мы не получим спецификацию). В прошлом я испытывал некоторые трудности с передачей массивных данных через интерфейсы БД. Но интернационализация по своей сути сложна. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...