2016-08-03 34 views
1

Ich kann dies tun Spaltentyp zu setzen eindeutige Zeichenfolge zu sein:SQLAlchemy: zufällige eindeutige ganze Zahl?

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

aber ich will random-unique-integer, nicht zufällig-unique-String erzeugen.

eine Idee, wie man das macht?


uuid.uuid4 (.)

dank int. Wenn ich neu angeben kann :) gibt es eine Möglichkeit, es in DB Integer Typ zu passen.

+1

Zugang ist es int-Attribut: '' 'uuid.uuid4() int''' wie in dem [docs] beschrieben (https://docs.python.org/2/library/uuid.html.). – sascha

+0

Oder benutze einfach eine Sequenz, die dir einzigartige Zahlen liefert, die gerade zufällig geordnet sind, aber wer sagt, dass sie nicht zufällig generiert wurden und du nur Glück gehabt hast? – larsks

+1

@larks Versuchen Sie, dies einem Sicherheitsberater zu erklären, wenn Sie Ihren Code überprüfen :-) – sascha

Antwort

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)