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
相关产品推荐
相关产品推荐

