我在AWS Lambda Function中使用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 ...
就像适用于Android 客户端的 SDK(旨在获取密钥甚至离线(一样,是否有一种解决方案可以在数据库上创建对象之前获取密钥?
截至 2021 年 9 月,它是: https://firebase.google.com/docs/database/admin/save-data#getting-the-unique-key-generated-by-push
引用@JW_的评论。
旧答案:
无法使用管理员 SDK。 但是,有一个JS代码的python端口用于在客户端生成ID。
Firebase团队的Michael Lehenbauer在一篇博客文章中描述了这一实现。在那里,您还可以找到指向实现的GitHub要点的链接,该要点又带有指向上述python实现的链接的注释。
以下内容会有所帮助吗?
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 连接,并尝试降低延迟。