如何在Firebase中根据唯一子节点值打印父节点及其子节点信息
问题修正方案
原代码存在的问题
- 重复调用
ref.get(),既冗余又增加不必要的Firebase请求开销 - 循环逻辑混乱,导致重复打印联系人节点键,且索引路径错误(比如
ref.get()['Agenda'][i][j]的路径完全错误,ref已经指向Agenda节点,无需再嵌套Agenda) - 没有正确利用查询返回的
query数据,query本身已经包含匹配的联系人完整数据,无需从根节点重新遍历
修正后的代码
def search(): tlf = verification('TLF number: ', 0) if tlf < 0: print("ERROR") return ref = db.reference('Agenda') # 执行查询,获取匹配Phone值的联系人数据 query = ref.order_by_child('Phone').equal_to(tlf).get() if query: # 直接判断query是否非空,无需len(query) # 遍历查询结果(因为Phone唯一,只会有一个条目) for contact_key, contact_data in query.items(): print(f"{contact_key}") # 遍历联系人的子节点键值对 for field, value in contact_data.items(): print(f"\t{field}: {value}") else: print("No results.")
代码说明
- 直接使用
query返回的键值对,避免重复请求Firebase - 利用
for contact_key, contact_data in query.items()直接获取联系人节点键和对应的数据 - 内层循环遍历联系人的字段(Name、Age、Phone),按要求格式打印
预期输出示例
Contact3 Name: xxxxx Age: 12 Phone: 123456789
内容的提问来源于stack exchange,提问作者Tito_Wisin
相关产品推荐
相关产品推荐

