在 Python 中根据日期创建唯一 ID

新手上路,请多包涵

在 MongoDb 中,为新文档自动分配的 ID (ObjectId) 是唯一的,并且在其内部包含其创建的时间戳。

在不使用任何库(除了 Python 的内置库)的情况下,我如何创建这种简洁的唯一 ID,并且以某种方式保存其创建时间戳?

原文由 Jundiaius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 532
2 个回答

如果你有一个多线程或多机场景,那么所有的赌注都没有了,如果只使用时间戳,你不应该依赖任何“额外级别的唯一保证”。 从 deceze 的这个优秀答案中 阅读更多内容。

与上述答案类似,另一种选择是连接时间戳和 uuid:

 from datetime import datetime
from uuid import uuid4

eventid = datetime.now().strftime('%Y%m-%d%H-%M%S-') + str(uuid4())
eventid
>>> '201902-0309-0347-3de72c98-4004-45ab-980f-658ab800ec5d'

eventid 包含 56 个字符,这对您来说可能是问题,也可能不是问题。但是,它包含创建时间戳并且是可排序的,所有这些在数据库中都是有利的,允许您在两个时间戳之间查询 eventid s。

原文由 sedeh 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用具有足够精度的纪元时间戳可能就足够了。将它与一个简单的用户 ID 结合起来,您将拥有一个嵌入了时间戳的唯一 ID:

 import time
epoch = time.time()
user_id = 42 # this could be incremental or even a uuid
unique_id = "%s_%d" % (user_id, epoch)

unique_id 现在的值类似于 42_1526466157 。您可以获取此值并将其拆分为 _ 字符 - 现在您拥有创建时间的原始纪元 (1526466157)。

原文由 Lix 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题