使用Python的gspread,我可以在不获取整个电子表格的情况下读取modifiedTime吗?如果没有变化我想使用本地缓存

问题描述 投票:0回答:1

我正在使用 gspread 加载电子表格中的读取内容,效果很好。然而,我经常遇到 Google 数据上限,尤其是在测试时。

我创建了一个缓存方法,如果本地副本不到一分钟,则使用该方法。但是,在调试时,我经常必须更改电子表格中的内容并立即看到代码执行的变化。另一方面,由于调试期间并非所有调用都需要新副本,因此如果删除缓存,我将很快达到数据上限。

有没有办法在获取电子表格之前检查它是否已更改?我知道电子表格的

modifiedTime
中有一个字段
_properties
,但它似乎没有访问器方法。这向我表明存在一种隐藏缓存机制。有吗。

在我看来,要填充

modifiedTime
,您无论如何都需要阅读整个电子表格。这是真的吗?

所以问题是:如何在不使用数据上限的情况下获取电子表格的最后修改时间?最好只使用 gspread?

python google-sheets google-drive-api google-sheets-api gspread
1个回答
0
投票

问题和解决方法:

在当前阶段,似乎无法通过编辑单元格正确更新

“Method: files.get”
modifiedTime的属性。 参考(作者:我) 所以,在这种情况下,“方法:revisions.list”用于检查更新时间。

在这种情况下,我认为

It also seems to me that to populate modifiedTime you need to read the entire spreadsheet anyways. Is that true?
的答案是否定的。

另外,关于

So here is the question: how do I get the last modified time of a spreadsheet without using my data cap? Preferably using only gspread?
,我认为Python的googleapis可以与gspread的客户端一起使用。

检查电子表格最后修改时间的示例脚本如下。

示例脚本:

import gspread
from googleapiclient.discovery import build

client = ### # Please set your gspread client.
spreadsheetId = "###" # Please set your Spreadsheet ID.

drive = build("drive", "v3", credentials=client.auth)
revisions = []
pageToken = ""
while pageToken is not None:
    res = drive.revisions().list(fileId=spreadsheetId, fields="nextPageToken,revisions(modifiedTime)", pageSize=1000, pageToken=pageToken if pageToken != "" else None).execute()
    r = res.get("revisions", [])
    revisions += r
    pageToken = res.get("nextPageToken")
lastModifiedTime = revisions[-1]["modifiedTime"]
print(lastModifiedTime)
  • 运行此脚本时,将像
    spreadsheetId
    一样检索
    2023-12-21T00:12:34.567Z
    电子表格的最后修改时间。

注:

参考:

© www.soinside.com 2019 - 2024. All rights reserved.