Как исправить запрос Firestore вдруг не работает - PullRequest
0 голосов
/ 08 января 2020

Я разрабатываю функцию API облака Google, и следующий запрос сработал (значит, получил данные), когда я сделал первый. query = db.collection(collectionId).where('dataSchema', '==', 'messages').order_by('dataSourceModifyDate', direction=firestore.Query.DESCENDING).limit(1)

Но я разрабатывал другой запрос и перезапускал запрос, но он не работал (значит, не получил никаких данных), хотя этот запрос работает в облачной платформе Google.

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

1 Ответ

1 голос
/ 08 января 2020

Это потому, что get возвращает итератор, а вы вызываете итератор (docs) дважды. Я не уверен, как объяснить это быстро, поэтому посмотрите на этот снимок экрана консоли:

enter image description here

Первая часть, которую я вызываю итератором, имеет значение, но в следующий раз это не так.

Таким образом, когда вы регистрируете его в if len(list(docs)) != 0:, вы получаете значение, а в следующий раз, когда вы вызываете то же самое - его нет. Я думаю, что решение будет состоять в том, чтобы создать список и работать с ним (как в list_it2 в примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...