2016-09-15 5 views
0

При определении модели я могу генерировать UUID как это:Генерирование хеш-идентификаторов из первичного ключа с автоинкрементами?

class Blah(Model): 
    id = Column(Integer, primary_key=True) 
    uuid = Column(String, default=lambda: str(uuid.uuid4()), unique=True) 

но то, что я хочу, чтобы генерировать Хашид на основе первичного ключа, что-то вроде этого (псевдо-код): (https://github.com/davidaurelio/hashids-python)

class Blah(Model): 
    id = Column(Integer, primary_key=True) 
    uuid = Column(String, default=lambda: Hashids().encode(pk_id), unique=True) 

проблема в том, что я не могу использовать сгенерированный PK изнутри функции python !!

Как я могу достичь этого ???

+0

Что вы имеете в виду? –

+0

u cant do: Hashids(). Encode (), afaik – user1019129

+0

Если ваша БД поддерживает последовательности, вы можете установить первичный ключ для значения по умолчанию 'my_hash_function (nextval (" my_sequence "))'. Вам нужно будет переопределить хэш-функцию в любой используемой вами БД. – univerio

ответ

0

Чтобы получить первичный ключ, вы можете использовать session.flush().

db.session.add(blah) 
db.session.flush() 
blah.uuid = hashids.encode(blah.id) 
db.session.add(blah)   
db.session.commit() 
Смежные вопросы