如何在 Firebase Admin Python SDK 推送前获取数据库密钥

How to obtain DB Keys before push in Firebase Admin Python SDK

我在 AWS Lambda 函数中使用 Firebase Admin Python SDK。 我想在一次更新中将多个对象推送到数据库中。

 for mess in arrayMessages:

    ...

    newMessageKey = root.child('.../messages').push().key

    messages_updates[newMessageKey] = {
            'author': 'Bob',
            'dateTime': d,
            'text': mess,
    }

    messagesKeys.append(newMessageKey)

    ...

root.child(''.../messages').set(messages_updates)

“...push().key”方法,立即在数据库上创建密钥(然后直接在一个命令中移动是有意义的,但会失去更新的效率)。 在不推送的情况下进行更新,插入增量整数键(平凡序列 0,1,2 ...)

SDK for Android Client(设计用于甚至离线获取密钥),是否有一种解决方案可以在创建对象之前获取密钥数据库?

以下内容是否有帮助?

new_message = root.child('.../messages').push({
    'author': 'Bob',
    'dateTime': d,
    'text': mess,
})
messagesKeys.append(new_message.key)

基于实时数据库 REST API 的数据库客户端(如 Python Admin SDK)不支持在客户端生成 ID。所以这是你得到的最佳选择。 FWIW,像上面那样进行 2 API 次调用也不错。 SDK 将在底层重用相同的 HTTP 连接,并尽量降低延迟。

截至 9 月2021 年是:https://firebase.google.com/docs/database/admin/save-data#getting-the-unique-key-generated-by-push

引用@JW_ 的评论。

旧答案:

无法使用管理 SDK。 但是有 a python port of the JS code that is used to generate the IDs client-side.

来自 firebase 团队的 Michael Lehenbauer 描述了实现 in a blog article. There you can also find a link to a GitHub gist of the implementation,它又对上面的 python 实现发表了带有 link 的评论。