2016-09-15 8 views
0

モデルを定義するときに私はこのようなUUIDを生成することができます。自動インクリメントされた主キーからハッシュIDを生成していますか?

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

が、私がしたいことは、主キー、このような何か(擬似コード)に基づいてhashidを生成することです: (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) 

問題は、私は内部のPython関数から生成されたPKを使用することはできません!

どうすれば実現できますか?

+0

どういう意味ですか? –

+0

あなたは:Hashids()。encode()、afaik – user1019129

+0

DBがシーケンスをサポートしている場合は、主キーに 'my_hash_function(nextval(" my_sequence "))'のデフォルト値を設定することができます。使用しているDBにかかわらず、ハッシュ関数を再実装する必要があります。 – univerio

答えて

0

session.flush()を使用して、割り当てられている主キーを取得できます。

db.session.add(blah) 
db.session.flush() 
blah.uuid = hashids.encode(blah.id) 
db.session.add(blah)   
db.session.commit() 
関連する問題