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

时间:2018-05-10 09:20:04

标签: python firebase firebase-realtime-database aws-lambda firebase-admin

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

 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”方法,立即在db上创建密钥(然后直接在一个命令中移动,但会失去更新的效率)。 在不推送的情况下执行更新,插入增量整数键(普通序列0,1,2 ...)

适用于Android客户端的SDK (旨在使密钥甚至脱机)一样,是否有解决方案甚至在数据库上创建对象之前获取密钥?

2 个答案:

答案 0 :(得分:0)

以下内容会有所帮助吗?

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连接,并尝试降低延迟。

答案 1 :(得分:0)

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

firebase团队的Michael Lehenbauer描述了实现in a blog article。在那里,您还可以找到一个link to a GitHub gist of the implementation,它依次带有注释和指向上述python实现的链接。