Flask+Firestore遍历集合文档存入字典仅返回单条数据如何解决
问题原因
- 循环内的
content1变量每次迭代都会被新生成的Art_cont实例覆盖,循环结束后仅保留最后一次循环的实例,因此打印只能输出1条数据。 - 没有提前声明容器存储所有生成的实例,其余3条实例生成后没有被引用,直接被丢弃。
解决代码
firebase_admin.initialize_app(cred) db = firestore.client() blog_col = db.collection(u'blog') class Art_cont: def __init__(self,title,date,link): self.title = title self.date = date self.link = link def getLast4(): query = blog_col.order_by("date").limit_to_last(4).get() # 提前初始化空列表存储所有实例 art_list = [] for doc in query: doc_dict = doc.to_dict() # 避免重复调用to_dict()提升效率 db_title = doc_dict["title"] db_date = doc_dict["date"] db_link = doc_dict["link"] content = Art_cont(db_title, db_date, db_link) # 将实例追加到列表保存 art_list.append(content) # 遍历输出所有实例内容 for art in art_list: print(art.title, art.date, art.link) # 后续需要封装HTML直接返回art_list即可 return art_list
优化说明
原代码中每次取值都调用了一次doc.to_dict(),同一文档重复调用三次会产生不必要的性能损耗,修改后先把文档转成字典存为临时变量,再从变量中取值即可。
内容的提问来源于stack exchange,提问作者Pancho
相关产品推荐
相关产品推荐

