Python-Google Firebase中的复杂查询

时间:2019-03-13 14:48:56

标签: python python-3.x firebase firebase-realtime-database

我有一个如下所示的数据库

enter image description here

我只想按顺序显示full_names。我想要该输出:

Alan Turing
Alan Turing
Alan Turing
Alan Turing
Alan Turing

我在下面尝试了此代码,但显示了用户名。

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

# Fetch the service account key JSON file contents
cred = credentials.Certificate('BLABLA.json')
# Initialize the app with a service account, granting admin privileges
firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://BLABLA.firebaseio.com/'
})

ref = db.reference('users')
snapshot = ref.order_by_child('full_name').get()
for key in snapshot:
    print(key)

输出为:

alanisawesom
alanisawesome
alanisawesomee
alanisawesomeee
alanisawesomeeee

我的错在哪里?你能解决吗?

编辑:我在Firebase中的规则是:

{
  "rules": {
    "users": {
      ".indexOn": ["date_of_birth", "full_name"]
    },
    ".read": "true",
    ".write": "true"
  }
}

1 个答案:

答案 0 :(得分:0)

您的查询告诉数据库返回users属性下在full_name下的节点。但是Firebase仍然返回完整的节点,而不仅仅是返回您要求订购的属性。

要仅显示每个节点的full_name,您需要从结果中的每个子节点获取该属性。像这样:

ref = db.reference('users')
snapshot = ref.order_by_child('full_name').get()
for user in snapshot.each():
    print(user.child("full_name").val())

我不是Pythonista,所以我在这里寻求语法方面的帮助:How to loop through each firebase database child with python?