Как задать свой autoincrement primary key в AppEngine/Python?

Есть, допустим, класс статьи, экземпляры которых хранятся в гугловском дата сторадже. И хочется дать на неё ссылку:

[ a href="/article/{{ article.uid }}" ]

Чтобы получилось типа такого:

[ a href="/article/55" ]

У гугла есть свои UUID'ы, но уж больно они страшны для для того чтобы быть частью урла: ahBzb3ZpZXRncm9vdmVibG9ncg0LEgdBcnRpY2xlGAgM.
  • Вопрос задан
  • 2798 просмотров
Решения вопроса 1
adso
@adso
Это уже реализовано. Кроме ключей BigTable раздает и числовые id. Запрос к БД по id:
Model.get_by_id()
Для получения id любой сущности — entity.key().id()

Оно вполне пригодно для урл, только учтите, что id инкриментится для сущностей любого типа в вашем приложении. Одно на всех. Поэтому числа выходят большие. Например, www.arhimir.ru/news/1126006 — сделано на GAE-Python.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FuN_ViT
@FuN_ViT
веб-разработчик
скорее всего придется использовать дополнительную модель:

class Sequence(db.Model):
    Key: db.StringProperty() #ключ, например "ArticleId"
    Number: db.IntegerProperty(default=1) #само значение

и смысл в том — что в одной транзакции сначала получаем значение Number, и тут же обновляем его на +1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы