首页 > 解决方案 > 如何修复python中的“查询”对象没有属性“to_dict”错误?

问题描述

我创建了一个云函数来在特定条件下从 firestore 获取数据。我已成功从 firestore 获取数据,但从 firestore 收到的数据位于“查询对象”中。如何将此 Query 对象转换为字典类型?

我试过.to_dict()函数来转换它,但是它给了我一个错误,

错误:函数崩溃。详细信息:“查询”对象没有属性“to_dict”

我也试过这个访问: How to convert firestore query response to json using python 但是,它没有用。

insights = db.collection('GA_data').where('artist_id','==',request_json['artist_id'])
    insights = insights.to_dict() 
    print(insights)

这是我的request_json

{'artist_id': #some_number}

我的预期结果是,

{
"artist_id" : #some_number,
"avgTimeOnPage" : "0.0",
"bouncerate" : "0.0",
"date" : "#some_date",
"newUsers"  : "0",
"pageviews" : "0",
"sessionDuration" : "0.0",
"slug" : "#some_slug",
"users" : "0" 
}

但我真正的输出是:

Query object : 
google.cloud.firestore_v1.query.Query object at 0x2a5f28059438

并且,在.to_dict()函数之后:

错误:函数崩溃。详细信息:“查询”对象没有属性“to_dict”

标签: python-3.xfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


您必须附加stream()到您的query然后使用 for 循环从您的查询可能返回的每个文档中获取数据,在您的情况下,我猜您只期望一个,但您的查询可能有多个文档。那么你的代码可能是这样的:

insights = db.collection('GA_data').where('artist_id', '==', request_json['artist_id']
for document in insights.stream():
    print(document.to_dict())

推荐阅读