我正在使用Google API Client Library for Python更新Fusion Table,并使用Fusion Tables API v1向Fusion Table添加行。当我使用SQL INSERT查询方法一次执行一行操作时,我可以成功地做到这一点。我还希望能够使用importRows
方法更新融合表。
我开始与一个文件'testCsv.csv',并希望将其完全导入到现有的融合表。这里有一个很好的概念性解释。
概念示例解释了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
?或者我在使用这种方法时遗漏了什么?
自从发布这个问题以来,我了解到application/octet-stream
类似于说类型是任何东西。我也弄清楚了我使用importRows
的问题。方法文档指出
"默认为UTF-8。如果您不确定编码,请使用
'auto-detect'
。"
我认为使用'auto-detect'
是确保我的请求被正确接收的最安全的方法。这是一个错误的假设:将编码更改为'utf-8'
会导致importRows
请求成功。