Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与服务帐户电子邮件共享谷歌工作表_Python_Google Sheets_Google Spreadsheet Api_Drive_Gspread - Fatal编程技术网

Python 与服务帐户电子邮件共享谷歌工作表

Python 与服务帐户电子邮件共享谷歌工作表,python,google-sheets,google-spreadsheet-api,drive,gspread,Python,Google Sheets,Google Spreadsheet Api,Drive,Gspread,我编写了一个脚本来连接到谷歌电子表格,并从中将数据加载到postgresql数据库中。 我已经创建了一个服务帐户,并以.json格式获得了它所需的凭据,问题是当我试图用我的服务帐户电子邮件共享google工作表时,我收到一封电子邮件,其中说: 向以下收件人的传递永久失败: dataload@geometric-shine-118101.iam.gserviceaccount.com 永久性故障的技术详细信息:DNS错误:地址解析 geometric-shine-118101.iam.gser

我编写了一个脚本来连接到谷歌电子表格,并从中将数据加载到postgresql数据库中。 我已经创建了一个服务帐户,并以.json格式获得了它所需的凭据,问题是当我试图用我的服务帐户电子邮件共享google工作表时,我收到一封电子邮件,其中说:

向以下收件人的传递永久失败:

 dataload@geometric-shine-118101.iam.gserviceaccount.com
永久性故障的技术详细信息:DNS错误:地址解析 geometric-shine-118101.iam.gserviceaccount.com的。失败:域名 找不到

该电子邮件与我在.json密钥文件中收到的电子邮件完全相同。 我查看了其他帖子,通常应该共享的电子邮件结构如下:

project_name@developer.gserviceaccount.com
但我的不一样,也许与此有关? 我按照指示做了这件事

这是.json密钥文件的副本:

{
  "type": "service_account",
  "project_id": "geometric-shine-118101",
  "private_key_id": "xxx",
  "private_key": "-----BEGIN PRIVATE KEY-----\nxxx\n-----END PRIVATE KEY-----\n",
  "client_email": "dataload@geometric-shine-118101.iam.gserviceaccount.com",
  "client_id": "117076930343404252458",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/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/dataload%40geometric-shine-118101.iam.gserviceaccount.com"
}
我解决了我的问题:

谷歌已经更新了它的服务账户详细信息格式,同时也更新了它与服务账户共享电子表格的方式,这样就可以从gspread访问这些电子表格

然后,我使用新的格式创建了一个服务帐户:dataload@geometric-shine-118101.iam.gserviceaccount.com,并将google生成的完全相同的文件设置为JSON,以供我的应用程序读取:

login = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)

然后在没有通知的情况下将电子表格与我的服务帐户电子邮件共享(与我刚才提到的JSON文件中的相同)

您是否向该地址发送了电子邮件,是否正常。我注意到它说的是DNS错误,所以看起来地址无效。但他的地址是我的.json密钥文件中的地址。我编辑了我的电子邮件,添加了实际的文件。这表明你的电子邮件格式是正确的。已删除SignedJwtAssertionCredentials