2016-08-03 1 views
1

je peux faire pour définir le type de colonne à chaîne unique:SQLAlchemy: random Entier unique?

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

mais je veux générer -aléatoire unique entier, non-chaîne aléatoire unique.

une idée de comment faire cela?


uuid.uuid4(). Int

grâce. Si je peux respecify :) est-il un moyen de l'adapter au type DB Integer.

+1

accès il est int attribut: '' 'uuid.uuid4() int''' comme décrit dans les documents [] (https://docs.python.org/2/library/uuid.html.). – sascha

+0

Ou simplement utiliser une séquence, ce qui vous donnera des entiers uniques qui viennent d'être commandés, mais qui peut dire qu'ils n'ont pas été générés aléatoirement et que vous avez juste eu de la chance? – larsks

+1

@larsks Essayez d'expliquer cela à un consultant en sécurité lors de la vérification de votre code :-) – sascha

Répondre

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)