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

PowerBI中Python连接Google Sheets:无本地密钥文件连接及报错咨询

解决PowerBI中Python读取Google Sheets无法使用本地密钥文件的问题

问题背景

你在PowerBI里运行Python脚本读取Google Sheets时,遇到了本地JSON密钥文件无法访问的问题,所以想换成直接传入密钥字典的方式连接——这个思路完全没问题,但你用错了方法才导致了KeyError: '_private_key_pkcs8_pem'的报错。

为什么会报错?

你用的ServiceAccountCredentials.from_json()方法其实不是用来加载服务账号密钥的!这个方法的作用是反序列化已经保存过的Credentials对象(比如之前用to_json()方法序列化的凭证),所以它会去寻找Credentials对象特有的键,比如_private_key_pkcs8_pem,而你的服务账号密钥字典里根本没有这个键,自然就抛出KeyError了。

正确的实现方式

要直接用密钥字典连接,你需要用ServiceAccountCredentials.from_json_keyfile_dict()方法,这个才是专门为传入服务账号密钥字典设计的。

完整示例代码

def connect_to_gsheets():
    # 把你的Google服务账号密钥转换成Python字典(内容和本地JSON文件完全一致)
    secret_key = {
        "type": "service_account",
        "project_id": "你的项目ID",
        "private_key_id": "你的私钥ID",
        "private_key": "-----BEGIN PRIVATE KEY-----\n你的私钥内容\n-----END PRIVATE KEY-----\n",
        "client_email": "你的服务账号邮箱@你的项目ID.iam.gserviceaccount.com",
        "client_id": "你的客户端ID",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/你的服务账号邮箱%40你的项目ID.iam.gserviceaccount.com"
    }
    
    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
    # 使用正确的方法传入密钥字典和权限范围
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(secret_key, scope)
    gc = gspread.authorize(credentials)
    return gc, credentials

注意事项

  • 不需要用json.dumps()处理密钥字典,直接传入原生的Python字典就可以
  • 确保secret_key里的private_key字段保留原JSON中的换行符(\n),否则会导致私钥解析失败

内容的提问来源于stack exchange,提问作者Laila Van Ments

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:22:52