创建基于日期Python中唯一的ID

问题描述 投票:0回答:4

MongoDB中新文档的自动分配ID(的ObjectId)是唯一的,内部本身包含其创作的时间戳。

不使用任何库(比Python的内置库等),我怎么可以创建这种类型的简洁的唯一ID也莫名其妙持有其创作的时间戳?

python python-3.x
4个回答
3
投票

如果你有一个多线程或者多机的情况下,所有的赌注都关闭,如果只使用时间戳你不应该依赖任何“唯一保证的额外水平”。阅读从this excellent answer from 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个字符可能会或可能不会是你的问题。然而,它拥有创造的时间戳和可排序所有这些都可能是数据库允许你两个时间戳之间的查询eventids有利,说。


2
投票

使用一个划时代时间戳和精度足够量可能只是够你。用一个简单的用户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)的原始时代。


2
投票

您可以使用datetime创建当前的时间戳:

import datetime
datetime.datetime.now().strftime('%Y%m%d%H%M%S')

现在,您可以连接与任何你想要的。

如果你想添加微秒,以确保它是独一无二的只是添加%f到最后:

datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')

-1
投票

您可以使用UUID,内置于标准库。具体来说,你可以使用一个uuid4只是一点点额外的安全性,因为它不编码计算机的网络地址。

import uuid

print(uuid.uuid4()) #56d36372-b5ec-4321-93b8-939ee7d780aa
© www.soinside.com 2019 - 2024. All rights reserved.