【问题标题】:SQLAlchemy : random Unique integer?SQLAlchemy:随机唯一整数?
【发布时间】:2016-08-03 22:42:06
【问题描述】:

我可以这样做将列类型设置为唯一字符串:

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

但我想生成 random-unique-integer,而不是 random-unique-string。

知道怎么做吗?


uuid.uuid4().int

谢谢。如果我可以重新指定:) 有没有办法将其放入 DB Integer 类型中。

【问题讨论】:

  • 访问它的 int 属性:uuid.uuid4().int,如docs 中所述。
  • 或者只是使用一个序列,它会为您提供恰好是有序的唯一整数,但谁能说它们不是随机生成的,而您只是幸运?
  • @larsks 在检查您的代码时尝试向一些安全顾问解释这一点:-)

标签: python random sqlalchemy unique identifier


【解决方案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)

【讨论】:

  • 为什么将列设为字符串而不是整数?
猜你喜欢
  • 2013-11-20
  • 2015-01-16
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多