スプレッドシートのデータをcsvでphpMyAdminからDBへインポートする流れ(とりあえず)

プログラミング勉強

スプレッドシートで作成したデータをMySqlに流し込みたい

しかし、

スプレッドシートのマクロをいじってスマートにデータの連携を図りたい。と思うも挫折。

ターミナルをいじってみるも挫折。

そんな私でもできた、比較的アナログで分かりやすいデータのインポート方法です。

phpMyAdminの画面からインポートするので、ターミナルを触ることもコードを書くこともありません。比較的失敗しにくい方法ではないでしょうか。

本当はもっと正しいやり方があると思うのですが、とりあえず手元のデータをDBに入れることができたので、その備忘録です。

前準備

CREATE TABLE ではなく INSERT なので、あらかじめDBにテーブルは作成済みの状態からスタートします。

今回のテーブルはカラムが9つ。

カラム名と型はこんな感じです。

phrase_id (int)
phrase_thai (verchar)
phrase_jp (verchar)
phrase_eng (verchar)
remark (verchar)
category_id (int)
delete_flg (tinyint)
create_date (datetime)
update_date (timestamp)

そしてスプレッドシートにも同じカラム名で同じ数だけカラムを作ってあります。

スプレッドシートのデータをcsvでダウンロード

まずはスプレッドシートのデータから落とします。

ファイルダウンロードカンマ区切りの値(csv、現在のシート)

を押してcsvをダウンロード。

次にMyAdminの該当テーブルを開きます。

phpMyAdmin側でインポート

phpMyAdminの該当テーブルを開いたら、インポートタブを選択。

次に必要項目を入力してゆきます。

  • インポートしたいファイルを選択
  • 1行目は飛ばす設定にする(カラム名の行はインポートせず飛ばしたい)
  • データの形式はcsvを選択。

さらに下にある細かなオプションは今回は触りませんでしたが、今後データを更新する際はUpdate data when duplicate keys found on import (add ON DUPLICATE KEY UPDATE)のオプションは便利そう。

最後に、goボタンを押すとインサートが始まります!

出てきたエラー1

Invalid column count in CSV input on line 1

こちらのエラーは文面の意味としては「カラムの数が違うよ」といった内容になるそうなのですが、私の場合は1行目(カラム名を入力している行)も読み込んでいたことが原因でした。

上記のように1行目は飛ばす設定にすれば解決します。

出てきたエラー2

Incorrect integer value: ” for column ‘id’ at row 1

このエラーは、int型やtinyint、datetime型で入れる項目(つまりvarchara/text以外)が空欄になっていると出ました。phpMyAdmin側でnullはOKにしているはずなのに・・・

仕方がないのでとりあえず適当な数値をスプレッドシート側で放り込んでおいて、空欄を無くしました。

オートインクリメント設定にしているidに関しては最初からスプレッドシート側で入力しておいたので分かりませんが、空欄ならこちらも同じエラーになってた・・・かも?

精進します。

繰り返しになりますが、もっとスマートにインポートする方法はあるはずなのです。

空欄のままでもnullとして保存してくれるとか、オートインクリメントでidを自動付与してくれるとか・・・

なので、あくまで「とりあえずこのデータ達を放り込みたいんじゃー」という時の応急処置としてです。

今回のデータは今後も触る必要があるので、私個人としてもより正しい方法をアップデートしてゆきたいところです。精進せねば!

タイトルとURLをコピーしました