Я исчерпаю квоту API gsheet для запросов на запись при записи относительно небольших фреймов данных в одну электронную таблицу.
Фреймы данных хранятся в словаре. КЛЮЧ используется для имени ЛИСТА, а ЗНАЧЕНИЕ — это экспортируемый фрейм данных.
Сейчас я просматриваю фреймы данных в цикле, создавая ЛИСТ и сохраняя данные.
gc = gspread.oauth(credentials_filename=credential_path("credentials.json"),
authorized_user_filename=credential_path("token.json")
)
gc_sh = gc.create('rote_output_' + yyyymmddhhss())
# (rote_data is the dictionary of dataframes)
for k, v in rote_data.items():
gc_sh.add_worksheet(title=k, rows=100, cols=20)
worksheet = gc_sh.worksheet(k)
worksheet.update([v.columns.values.tolist()] + (v.fillna('')).values.tolist())
worksheet.freeze(rows=1)
Похоже, что четыре «операции» в цикле рассматриваются как отдельные вызовы, и поэтому, если у меня есть 15 кадров данных, я мгновенно обрабатываю 60 запросов на запись, вызывая блок API.
Есть ли способ выполнять обновления как «массовый» запрос, чтобы не выйти за эти ограничения? Документация по пакетному обновлению() не содержит подробностей, и я не уверен, что можно создать, а затем сохранить на разных листах, используя эту формулу, что было бы идеально.
** РЕДАКТИРОВАТЬ:
Как создать несколько листов в электронной таблице с помощью gspread и Python?
Из этого вопроса/ответа видно, что пакетное обновление может иметь возможность сделайте это, хотя не ясно, как бы я совместил запрос на создание листа с фактическим обновлением данных на каждом листе
client = # Please use your client.
employee_names = ["Jonny", "Emma",,,] # Please set the sheet names. spreadsheetId = "###" # Please set your spreadsheet ID.
requests = [
{
"addSheet": {
"properties": {
"title": e,
"gridProperties": {"rowCount": 100, "columnCount": 20},
}
}
}
for e in employee_names ]
spreadsheet = client.open_by_key(spreadsheetId)
spreadsheet.batch_update({"requests": requests})
Подробнее здесь: https://stackoverflow.com/questions/786 ... g-api-writ