python数字长度_如何生成唯一的8长度数字,例如帐户ID(Python,Django)

给你import random

import string

''.join(random.choice(string.digits) for _ in range(8))

python3.6使用随机选择()

^{pr2}$

避免可能的碰撞:

尝试使用生成的id(完整性错误除外)创建新对象,请再次创建id。在

例如-def create_obj():

id = ''.join(random.choices(string.digits, k=8))

try:

MyModel.objects.create(id=id)

except IntegrityError:

create_obj()

或者def create_unique_id():

return ''.join(random.choices(string.digits, k=8))

def create_object():

id = create_unique_id()

unique = False

while not unique:

if not MyModel.objects.get(pk=id):

unique = True

else:

id = create_unique_id()

MyModel.objects.create(id=id)

感谢@WillemVanOnsem指出了生成重复id的可能性,我提供的两个示例将根据需要创建一个新的id,以获得唯一的id,但是,随着数据库中行数的增加,获取唯一id的时间将越来越长,并且数据库中有太多记录(10^8)时,无法使用8位uid创建新记录,因为所有可能的组合都已存在,那么在尝试时,您将陷入无限循环创建新对象。

如果我的遗嘱所提供的数据是正确的,我说这些变化太高了。所以我建议不要自己创建id,使用django的默认auto字段或uuid,这样可以保证空间和时间的唯一性。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值