我在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 (旨在使密钥甚至脱机)一样,是否有解决方案甚至在数据库上创建对象之前获取密钥?
答案 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实现的链接。