使用Python更新Google Sheet数据失败:无报错但未更新
问题分析与解决方案
核心问题:HTTP方法使用错误
Sheety API中,POST请求的作用是新增一行数据,而非修改已有行。要更新现有行的iataCode,你需要使用PUT(全量更新)或PATCH(部分更新)方法,且请求端点必须包含目标行的ID。
其他待修正问题
- 原代码未判断
iataCode是否为空,会对所有行重复执行操作 - 注释中的空值判断存在语法错误,正确写法应为
if row["iataCode"] == ""(或根据Sheety返回的空值格式调整,比如None) - 请求数据的嵌套键需使用表名的单数形式(
"price"),而非原代码中的复数"prices",否则Sheety无法正确映射字段
修改后的代码
import requests END_POINT_SHEET = "https://api.sheety.co/6adb0e05a44ead17ca9ff3a936123348/copyOfFlightDeals/prices" # 获取所有行数据并检查请求是否成功 response = requests.get(END_POINT_SHEET) response.raise_for_status() data = response.json()["prices"] # 遍历每行,仅更新空的iataCode列 for row in data: # 判断iataCode是否为空(根据实际返回值调整条件) if not row["iataCode"]: # 构造带行ID的更新端点 update_url = f"{END_POINT_SHEET}/{row['id']}" # 构造符合Sheety要求的更新数据 update_payload = { "price": { "iataCode": "TESTING" } } # 发送PUT请求更新目标行 update_response = requests.put(update_url, json=update_payload) update_response.raise_for_status() print(f"行ID {row['id']} 更新成功:{update_response.text}")
关键说明
raise_for_status()会主动抛出请求中的错误(如权限不足、端点无效),方便排查隐藏问题- 仅对
iataCode为空的行执行更新,避免无效操作 - 使用行ID精准定位需要修改的行,确保数据更新到目标位置
内容的提问来源于stack exchange,提问作者adam sara
相关产品推荐
相关产品推荐

