You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python更新Google Sheet数据失败:无报错但未更新

问题分析与解决方案

核心问题:HTTP方法使用错误

Sheety API中,POST请求的作用是新增一行数据,而非修改已有行。要更新现有行的iataCode,你需要使用PUT(全量更新)或PATCH(部分更新)方法,且请求端点必须包含目标行的ID。

其他待修正问题

  1. 原代码未判断iataCode是否为空,会对所有行重复执行操作
  2. 注释中的空值判断存在语法错误,正确写法应为if row["iataCode"] == ""(或根据Sheety返回的空值格式调整,比如None)
  3. 请求数据的嵌套键需使用表名的单数形式("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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:42:40