Lan's note

高速HUGOブログで脱WordPress!静的ブログでもココまでできるを実証中!

2019-07-26

Go言語[Golang]MariaDBに接続してTRUNCATEしINSERTする

mysqlパッケージのインストール

$ go get github.com/go-sql-driver/mysql

Tweet実行コード

package main

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	// データベースに接続する
	db, err := sql.Open("mysql", "DBユーザー名:DBパスワード@/DB名")
    if err != nil {
        panic(err)
    }
	defer db.Close()

	// テーブル空にする
	stmt, err := db.Prepare("TRUNCATE `テーブル名`")
	if err != nil {
		panic(err.Error())
	}
	defer stmt.Close()
	_, err = stmt.Exec() // TRUNCATE実行

	// テーブルにデータを挿入する
	stmt, err = db.Prepare("INSERT INTO `テーブル名` (`カラム名1`, `カラム名2`, `カラム名3`) VALUES (?, ?, ?)")
	if err != nil {
		panic(err.Error())
	}
	defer stmt.Close()
	_, err = stmt.Exec("データ1", "データ2", "データ3") // INSERT実行
}

解説

  • _ “github.com/go-sql-driver/mysql”
  • アンダースコア「_」をつけます。mysqlパッケージのinitを呼び出すのみとなります。
  • データベース接続
  • db, err := sql.Open(“mysql”, “DBユーザー名:DBパスワード@/DB名”)
  • サンプル:db, err := sql.Open(“mysql”, “gouser:gomyapasswd@/go_database”)
  • テーブルを空にする
  • stmt, err := db.Prepare(“TRUNCATE `テーブル名`”)
  • _, err = stmt.Exec()
  • テーブルにデータを挿入する
  • stmt, err = db.Prepare(“INSERT INTO `テーブル名` (`カラム名1`, `カラム名2`, `カラム名3`) VALUES (?, ?, ?)")
  • _, err = stmt.Exec(“データ1”, “データ2”, “データ3”)
  • プレースホルダーに値をセットしてINSERTします。

テーブルを空にするのもデータを挿入するのも、データベースへの接続に成功したら、SQLをPrepareして、Exec()するだけです。

他の言語から移行された人もわかりやすい構造になっっていると思います。