如何修复Firestore查询突然不工作

2024-09-30 22:23:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发GoogleCloudAPI函数,当我第一次进行查询时,下面的查询确实有效(意味着获取数据)。 query = db.collection(collectionId).where('dataSchema', '==', 'messages').order_by('dataSourceModifyDate', direction=firestore.Query.DESCENDING).limit(1)

但是我正在开发另一个查询并重新运行该查询,但是它不起作用(意味着没有获得任何数据),尽管该查询在谷歌云平台上工作

query = db.collection(collectionId).where('dataSchema', '==', 'messages').order_by('dataSourceModifyDate', direction=firestore.Query.DESCENDING).limit(1)
     docs = query.get()
     temp = datetime.datetime.strptime('1900-01-01T00:00:00Z', '%Y-%m-%dT%H:%M:%SZ')
     if len(list(docs)) != 0:
         recent_doc = list(docs)[0]
                temp = datetimewithnanoToDatetime(recent_doc.to_dict()['dataSourceModifyDate'])

如果运行代码,则会发生以下错误

File "D:\work\upwork\simon_chapleau\projects\krakenGetEntitiesFrom365.py", line 210, in index
return getEntitiesFrom365(request)
File "D:\work\upwork\simon_chapleau\projects\krakenGetEntitiesFrom365.py", line 97, in getEntitiesFrom365
recent_doc = list(docs)[0]
IndexError: list index out of range

Tags: docsdbbydocorderwherequerylist
1条回答
网友
1楼 · 发布于 2024-09-30 22:23:46

这是因为get返回迭代器,并且您要调用迭代器(docs)两次。我不知道如何快速解释,请看此控制台屏幕截图:

enter image description here

第一部分我称之为迭代器len,它有值,但下一次它没有值

因此,当您在if len(list(docs)) != 0:中签入它时,您会得到值,下次调用相同的值时,它就没有了。我认为解决方案是创建列表并使用它(如示例中的列表2)

相关问题 更多 >