如何正确分配_?

Nik*_*ntz 4 python google-app-engine python-2.7 webapp2 google-cloud-datastore

我希望我的id为<999999999,但现在尝试编程它似乎有相反的效果,我只是让id更大,当我尝试分配id开始>结束?

start, end = User.allocate_ids(max=999999999)
logging.info('start %d' % start)
logging.info('end %d' % end)
lower = start if start < end else end
key = User(id=lower).put()
logging.info('key: '+str(key))
user = key.get()
user.add_auth_id(email)
Run Code Online (Sandbox Code Playgroud)

我的日志输出显示分配的ID错误:

2012-02-13 03:19:07.396 start 98765439124
I 2012-02-13 03:19:07.396 end 98765439123
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

更新

我最终使用的脏的解决方法是制作一种自己的ID系统,我不应该这样做,但它是这种情况下唯一的解决方案,我不认为这会产生冲突或重复,如果实体开始填充,它可能会很慢up,但是现在这似乎是一个对用户可接受的解决方案,虽然看起来可能看起来不那么好看代码:

    new_id = random.randint(1,999999999)
    logging.info('testing new id: %d' % new_id)
    while User.get_by_id(new_id) != None:
        new_id = random.randint(1,999999999)
    logging.info('creating new id: %d' % new_id)
    key = User(id=new_id).put()
Run Code Online (Sandbox Code Playgroud)

pro*_*ppy 5

NDB文档中所述:allocateIds(max=)如果您尝试保留已分配的ID,将返回可用的第一个ID.

在您的情况下,所有ID 999999999之前已经分配过(可能是通过其他调用allocate_ids),98765439124是第一个可用的ID,98765439123是最后一个已分配的ID.

请参阅以下示例:

>>> Foo.allocate_ids(max=26740080011040)
(26740080011031L, 26740080011040L)
Run Code Online (Sandbox Code Playgroud)

分配所有ID最多26740080011040

>>> Foo.allocate_ids(max=26740080011040)
(26740080011041L, 26740080011040L)
Run Code Online (Sandbox Code Playgroud)

已经分配了最多26740080011040的所有ID,第一个可用的ID是26740080011041,最后分配的是26740080011040

>>> Foo.allocate_ids(max=26740080011050)
(26740080011041L, 26740080011050L)
Run Code Online (Sandbox Code Playgroud)

分配所有ID最多26740080011050