मैं 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
0
thinkmore 8 जिंदा 2020, 15:03

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि get पुनरावर्तक लौटा रहा है, और आप पुनरावर्तक (docs) को दो बार कॉल कर रहे हैं। मुझे यकीन नहीं है कि इसे तेजी से कैसे समझा जाए इसलिए इस कंसोल स्क्रीनशॉट को देखें:

enter image description here

पहले भाग को मैं इटरेटर लेन कहता हूं, इसका मूल्य है, लेकिन अगली बार ऐसा नहीं होता है।

इसलिए जब आप इसे if len(list(docs)) != 0: में चेक करते हैं तो आपको मूल्य मिलता है और अगली बार जब आप इसे कॉल करते हैं - यह नहीं होता है। मुझे लगता है कि समाधान सूची बनाना और उसके साथ काम करना होगा (उदाहरण में list_it2 की तरह)।

1
vitooh 8 जिंदा 2020, 13:31