【问题标题】:How to fix Firestore query suddenly not working如何修复 Firestore 查询突然不起作用
【发布时间】:2020-01-08 12:03:28
【问题描述】:

我正在开发谷歌云 API 功能,当我第一次创建时,以下查询确实有效(意味着获取数据)。 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

【问题讨论】:

    标签: python google-cloud-firestore


    【解决方案1】:

    这是因为 get 正在返回迭代器,而您调用了迭代器 (docs) 两次。我不知道如何快速解释它,所以看看这个控制台截图:

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

    因此,当您在if len(list(docs)) != 0: 中检查它时,您会获得价值,而下次您调用相同的值 - 它没有。我认为解决方案是创建列表并使用它(如示例中的 list_it2 中)。

    【讨论】:

    • 哇,你真是个天才。非常感谢。我浪费了太多时间来解决这个问题,我要疯了。最后,我在这里发布问题作为最后的手段。你的答案很完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2020-07-27
    • 2014-11-16
    相关资源
    最近更新 更多