Сведения о вопросе

Htmlщик

03:48, 17th August, 2020

Теги

Python   G   Suite    

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

Просмотров: 319   Ответов: 2

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

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

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

[ a href="/article/55" ]

У гугла есть свои UUID'ы, но уж больно они страшны для для того чтобы быть частью урла: ahBzb3ZpZXRncm9vdmVibG9ncg0LEgdBcnRpY2xlGAgM.



  Сведения об ответе

screen

07:10, 29th August, 2020

Это уже реализовано. Кроме ключей BigTable раздает и числовые id. Запрос к БД по id:
Model.get_by_id()
Для получения id любой сущности — entity.key().id()

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


  Сведения об ответе

ASER

16:58, 25th August, 2020

скорее всего придется использовать дополнительную модель:

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться