使用 SODA API 删除数据集中的所有行

Deleting all rows in dataset with SODA API

我正在尝试使用 SODA API 以编程方式删除 Socrata 数据集中的所有行。我不想删除数据集本身,因为那样我需要做很多工作来重建它。对数千行执行此操作也很慢。

以前,我在每一行上缓慢迭代,删除每一行,直到 someone on Twitter,建议执行没有行的更新插入。我相信我实现了这个并且它起作用了,但现在它没有。

这是相关的代码:

headers = {'X-App-Token': config.app_token}
headers['Content-Type'] = 'application/json'

r = requests.put(config.dataset + '.json', data='[ ]', headers=headers, auth=config.auth)
print r.status_code, r.text

输出为:

200 {
  "By RowIdentifier" : 0,
  "Rows Updated" : 0,
  "Rows Deleted" : 0,
  "Rows Created" : 0,
  "Errors" : 0,
  "By SID" : 0
}

(所以我认为可以肯定地说问题与身份验证、授权等无关?我的其他插入行的功能工作正常,所以数据集错误也不是问题URL 或任何东西。)

我也查询了前后的行数,没有变化。还有几千行。

据我所知,我正在关注 Replacing rows in bulk 的 API 文档。

我唯一能想到的是,由于一个错误,我有多个行具有相同的rowid。

编辑

这里有一些重复的行标识符:

rowid 肯定设置为行标识符:

既然行标识符应该是“essentially act the same way as primary keys”,我开始怀疑这是一个错误,还是出了什么大错?发布代码如下所示:

def publishDataset(rows):
  r = requests.post(config.dataset, data=simplejson.dumps(rows), headers = headers, auth=config.auth)
  j = r.json()
  print
  if r.status_code != 200:
    raise RuntimeError ( "%d Socrata error: %s" % (r.status_code, j['message']))
  return j

完整代码在这里:https://github.com/stevage/meshlium-soda

很抱歉延迟回复您。我认为文档中存在错误,您应该在 API 端点上使用 DELETE 代替:

%> curl --verbose -X DELETE --header "X-App-Token: [REDACTED]" --user [REDACTED] https://soda.demo.socrata.com/resource/ppbu-8a96.json
Enter host password for user '[REDACTED]':
* Hostname was NOT found in DNS cache
*   Trying 216.227.229.224...
* Connected to soda.demo.socrata.com (216.227.229.224) port 443 (#0)
* TLS 1.0 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* Server certificate: *.demo.socrata.com
* Server certificate: AlphaSSL CA - SHA256 - G2
* Server certificate: GlobalSign Root CA
* Server auth using Basic with user '[REDACTED]'
> DELETE /resource/ppbu-8a96.json HTTP/1.1
> Authorization: Basic [REDACTED]
> User-Agent: curl/7.37.1
> Host: soda.demo.socrata.com
> Accept: */*
> X-App-Token: [REDACTED]
>
< HTTP/1.1 200 OK
* Server nginx is not blacklisted
< Server: nginx
< Date: Fri, 09 Jan 2015 06:31:16 GMT
< Content-Type: application/json; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< X-Socrata-Region: production
< Age: 14
<

这应该可以解决问题。如果它也适合你,我会更新我的文档。抱歉造成混淆!