非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Google Apps ScriptからFusion Tablesに新規挿入・更新・削除する方法

   

以前、Google Apps ScriptでデータベースFusion Tablesの導入方法について書きました。

この時は読み込みだけの紹介でしたが、今回はデータの新規挿入(INSERT)、更新(UPDATE)、削除(DELETE)の方法について書きます。

[ad#top-1]

その前にFusion Tablesの準備

Fusion Tablesの導入方法はこちらを参考にしてください。

テーブルは以下を準備しました。Googleブックマークのようなもにを作る前提でいます。DATEは日付型のシリアル値です。

 

データの新規挿入(INSERT)

テーブルにデータを新規挿入します。

ソースコードは以下の通り。

function Insert(){
  var now = new Date(); //現在日時取得
  d = Number(now);  //数値型に変換
  var docid = "1Br3...NU5R"; //urlに含まれるdocid
  var sql = "INSERT INTO " + docid + " (NAME, URL, FOLDER, Date) VALUES " +
              "('Facebook', 'https://www.facebook.com/', 'SNS', " +d+ ")";
  FusionTables.Query.sql(sql);
}
 

 

実行してみましょう。実行する場合はメニューの「実行」−「関数を実行」−(目的の関数名)を選択します。

 

実行後、Fusion Tablesをリロードすると以下の通りちゃんとデータが挿入されました。

 

データの更新と削除の前にROWIDの存在について

Fusion Tablesは普通のSQL文が使えて便利なのですが、データの更新と削除は単純にはいきません。

例えば、以下の構文はNGです。

UPDATE (docid名)  SET FOLDER='SNS' WHERE NAME = 'Twitter';
 

 

UPDATEとDELETEに関しては、WHERE句にデータフィールドを使えないという決まりがあります。

じゃあどうするかというと、実はFusion Tablesのテーブルの裏にはROWIDというオートナンバリングされたIDが隠れているのです。

これは、SELECT * では取得できません。ちゃんと明示してあげる必要あります。

SELECT ROWID FROM(docid名) WHERE NAME = 'Twitter'";
 

 

この一文をまず入れてROWIDを取得してから、データの更新/削除の際にWHERE句でROWIDを引っ掛けてやればOKです。

以上を踏まえて次に進みましょう。

 

データの更新(UPDATE)

次にデータを編集したいと思います。

よく見るとTwitterが「サーチエンジン」というFOLDER名になっていますね。これを正しく「SNS」に直してみたいと思います。

 

ソースコードは以下の通り。前述の通り最初にRAWIDを取得しています。

function Update(){
  var docid = "1Br3...NU5R"; //urlに含まれるdocid
  //ROWIDの取得
  query = "SELECT ROWID FROM " + docid + " WHERE NAME = 'Twitter'";
  var result = FusionTables.Query.sqlGet(query);
  //ROWIDを指定して更新
  query = "UPDATE " + docid + " SET FOLDER='SNS' WHERE ROWID = '" + result.rows[0][0] + "'";
  FusionTables.Query.sql(query);
}
 

 

ご覧の通り編集されました。

 

 

データの削除(DELETE)

今度はデータの削除です。

データの更新同様、最初にRAWIDを取得してそれをWHERE句で引っ掛けます。

function Delete(){
  var docid = "1Br3...NU5R"; //urlに含まれるdocid
  //ROWIDの取得
  query = "SELECT ROWID FROM " + docid + " WHERE NAME = 'Twitter'";
  var result = FusionTables.Query.sqlGet(query);
  //ROWIDを指定して削除
  query = "DELETE FROM " + docid + " WHERE ROWID = '" + result.rows[0][0] + "'";
  FusionTables.Query.sql(query);
}
 

 

ご覧の通りデータを削除できました。

[ad#ad-1]

スポンサーリンク

 - Google Apps Script, Google Dirve