我可以一次更新30行,但我尝试在下面的代码更新融合表,但我无法更新超过30条记录。如何解决这个问题呢 ?
如果谷歌API有任何限制 - 融合表。如何避免融合表限制。
更新超过30条记录时,我的误差低于此值。
503 (Service Unavailable)
Object {code: 503, data: Array[1], message: "Internal error. Please try again.", error: Object}
以下是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Authorization Request</title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
<script type="text/javascript">
function auth() {
var config = {
'client_id': '607567025394-rmte05500pvsoj12dsrie1cbei5te506.apps.googleusercontent.com',
'scope': 'https://www.googleapis.com/auth/fusiontables',
'immediate': false
};
gapi.auth.authorize(config, function () {
console.log('login complete');
console.log(gapi.auth.getToken());
});
}
function Update_row() {
//First authenticate user:
auth();
//Set Google Development colsole API key
gapi.client.setApiKey('AIzaSyAnEhw4Y7n5V7bN226wWo0tHs0Bd7jAzxA');
//Fusion table URL : https://www.google.com/fusiontables/DataSource?docid=1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o
gapi.client.load('fusiontables', 'v2', function () {
var i;
for (i = 0; i < 50; i++) {
var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number = '" + i + "'";
gapi.client.fusiontables.query.sql({ sql: selectQry }).execute(function (response) {
console.log(response);
//To get ROWID:
var getRowID = response["rows"][0][0];
//Update Fusion Table values - Based on selecred ROWID values :
var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID = '" + getRowID + "'";
gapi.client.fusiontables.query.sql({ sql: updateQry }).execute(function (response) {
console.log(response);
});
});
}
});
}
</script>
</head>
<body>
<button onclick="Update_row();">Update Fusion Table Rows</button>
</body>
</html>
有什么想法吗?
答案 0 :(得分:1)
您有50个相同的查询,这不是一个好的解决方案。这可能是因为谷歌表格响应此错误。您应该使用sql构造WHERE BETWEEN X and Y
。
在您的情况下,更好的解决方案是:
var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number BEETWEN 1 and 50";
而不是
var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number = '" + i + "'";
此查询返回数组中的结果。之后你可以使用这个数组。
您也多次执行UPDATE
次。最佳解决方案对您选择的所有行执行此操作。所以你应该使用WHERE ROWID IN (id1,id2,id3,...,idn)
。
在你的情况下,你应该像这样准备你的查询:
var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID IN (id1,id2,id3,...,idn)";
而不是
var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID = '" + getRowID + "'";
答案 1 :(得分:1)
你正在达到你的配额。请参阅the docs,了解每个表每分钟的写请求数。
您应该使用某种限制机制或importRows方法。 如果你问我,后者会更好。