我可以这样设置列类型为唯一字符串:
uuid = Column(String, default=lambda: str(uuid.uuid4()), unique=True)
但我想生成随机唯一整数,而不是随机唯一字符串。
有什么办法可以做到这一点吗?
uuid.uuid4().int
谢谢。如果我可以重新说明 :) 是否有一种方法可以将其适应于数据库整数类型。
我可以这样设置列类型为唯一字符串:
uuid = Column(String, default=lambda: str(uuid.uuid4()), unique=True)
但我想生成随机唯一整数,而不是随机唯一字符串。
有什么办法可以做到这一点吗?
uuid.uuid4().int
谢谢。如果我可以重新说明 :) 是否有一种方法可以将其适应于数据库整数类型。
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)
数据库中的INTEGER类型是4字节(32位)。
uuid.uuid4().int
生成一个128位整数。
因此,只需忽略大部分位数(使用位移运算符):
uuid = Column(Integer, default=lambda: uuid.uuid4().int >> (128 - 32), unique=True)
uuid.uuid4().int
,如文档所述。 - sascha