使用importRows上传FusionTables数据失败,出现HttpError 500:Backend Error

时间:2014-07-02 18:32:54

标签: python google-api google-fusion-tables google-api-python-client

我使用Google APIs Client Library for Python更新Fusion Table并使用Fusion Tables API v1将行添加到Fusion Table。当我使用SQL INSERT查询方法一次一行地执行此操作时,我可以成功执行此操作。我还希望能够使用importRows方法更新Fusion表。

我从文件'testCsv.csv'开始,并希望将其完全导入现有的Fusion Table。对此here进行了很好的概念性解释。

概念性示例解释了API是否接受了图像,但是为了更新Fusion Table,类型必须是“application / octet-stream”。

我尝试将importRows方法与以下代码一起使用(注意:service是经过身份验证的API连接):

from apiclient.discovery import build
from apiclient.http import MediaFileUpload
.
.
.
mediaCsv=MediaFileUpload(csvFileName, mimetype='application/octet-stream')
request = service.table().importRows(tableId=wrrTweetsID, media_body=mediaCsv,
            startLine=1, encoding='auto-detect')
response = request.execute()

当我执行此代码时,我收到此错误消息:

raise HttpError(resp, content, uri=self.uri)
apiclient.errors.HttpError: <HttpError 500 when requesting
  "https://www.googleapis.com/upload/fusiontables/v1/tables/--table_id--/import?uploadType=media&alt=json&startLine=1&encoding=auto-detect"
  returned "Backend Error">

我的问题是,我是否需要对.csv执行某些操作才能将其转换为application/octet-stream?或者在使用这种方法时我还缺少什么?

1 个答案:

答案 0 :(得分:4)

自发布此问题以来,我了解到application/octet-stream类似于说类型是什么。我也弄清楚使用importRows时出了什么问题。 method documentation表示

  

&#34;默认为UTF-8。如果您不确定编码,请使用'auto-detect'。&#34;

我认为使用'auto-detect'是确保我的请求得到正确接收的最安全方法。这是一个不正确的假设:将编码更改为'utf-8'会导致importRows请求成功。