Строковая версия каждого экземпляра db.Key имеет одинаковый префикс, и этот префикс представляется уникальным для каждого экземпляра разработчика. Несмотря на то, что все они имеют одинаковый идентификатор приложения, кодированная версия ключа различна для каждой машины.
Например, строковый ключ для Foo: 1 на одном компьютере:
ahNkZXZ-bWVkaWFjb29sZXItYXBwcgkLEgNGb28YAQw
На другой машине это:
ahFzfm1lZGlhY29vbGVyLWFwcHIJCxIDRm9vGAEM
Я не уверен, сколько символов (битов?) Ключа представляет имя приложения вместо типа и идентификатора объекта, поэтому я не считаю правильным использование подстроки, содержащей первые N символов, способ сделать это.
Первая попытка:
def get_unique_id():
return str(db.Key.from_path('UNIQUE_INSTANCE_ID', 1))
То, что он делает, это создает фиктивную db.Key для типа модели, который не существует. На разных машинах это дает различное значение, а на одном и том же компьютере оно последовательно дает одно и то же значение.
UPDATE:
Как отметил @ Ник Джонсон, на самом деле это работает не так, как я ожидал, и не решает проблему. Я предполагал, что это appid в app.yaml, используемый в ключе, однако appid, используемый для ключей, - это appid из app.yaml с префиксом в зависимости от того, выполняется ли приложение в SDK или в хранилище данных HR, поэтому строковое представление этих ключей отличается, потому что appid в них отличается.