2016-08-03 13 views
1

私は、一意の文字列であることを列タイプを設定するには、この操作を行うことができます。SQLAlchemy:randomユニークな整数?

uuid = Column(String, default=lambda: str(uuid.uuid4()), unique=True) 

が、私はランダムユニークな整数、ないランダムユニークな文字列を生成したいです。

どうすればいいですか?


uuid.uuid4()。

感謝をint型。私が再指定できる場合、それはDB Integer型に適合する方法です。

+1

のアクセスは、それがint型属性です: '' 'uuid.uuid4()[ドキュメント]で説明したようにint'''(https://docs.python.org/2/library/uuid.html。 )。 – sascha

+0

または、シーケンスを使用すると、順序付けられたばかりのユニークな整数が返されますが、ランダムに生成されず、あなたはただ運が良かったと言えるのは誰ですか? – larsks

+1

@larsksあなたのコードをチェックするとき、これを安全コンサルタントに説明してください:-) – sascha

答えて

1
from random import randint 

def random_integer(): 
    min_ = 100 
    max_ = 1000000000 
    rand = randint(min_, max_) 

    # possibility of same random number is very low. 
    # but if you want to make sure, here you can check id exists in database. 
    from sqlalchemy.orm import sessionmaker 
    db_session_maker = sessionmaker(bind=your_db_engine) 
    db_session = db_session_maker() 
    while db_session.query(Table).filter(uuid == rand).limit(1).first() is not None: 
     rand = randint(min_, max_) 

    return rand 

class Table(Base): 
    uuid = Column(String, default=random_integer, unique=True) 
関連する問題