MySQLを使い始める

このチュートリアルでは、MySQLでsqlcを使用する方法の基本を説明します。sqlcの最新バージョンとGoツールチェインが必要です。sqlc自体に依存関係はありません。

セットアップ

新しいディレクトリを作成し、Goモジュールを初期化します。

go mod init tutorial.sqlc.dev/app

設定

sqlc.yamlファイルを作成し、MySQLエンジンを使用するようsqlcを設定します。

version: "2"
sql:
  - engine: "mysql"
    queries: "query.sql"
    schema: "schema.sql"
    gen:
      go:
        package: "tutorial"
        out: "tutorial"

スキーマ

schema.sqlでデータベーススキーマを作成します。

CREATE TABLE authors (
  id   BIGINT  NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name text    NOT NULL,
  bio  text
);

クエリ

query.sqlで実行したいクエリを作成します。

-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = ? LIMIT 1;

-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name;

-- name: CreateAuthor :execresult
INSERT INTO authors (
  name, bio
) VALUES (
  ?, ?
);

-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = ?;

コード生成

sqlc generateを実行してコードを生成します。

sqlc generate

tutorialサブディレクトリにdb.gomodels.goquery.sql.goが作成されます。

使用方法

依存関係を取得してプロジェクトをビルドします。

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

生成されたコードは次のように使用できます。

package main

import (
	"context"
	"database/sql"
	"log"
	"reflect"

	_ "github.com/go-sql-driver/mysql"

	"tutorial.sqlc.dev/app/tutorial"
)

func run() error {
	ctx := context.Background()

	db, err := sql.Open("mysql", "user:password@/dbname?parseTime=true")
	if err != nil {
		return err
	}

	queries := tutorial.New(db)

	// 全著者をリスト
	authors, err := queries.ListAuthors(ctx)
	if err != nil {
		return err
	}
	log.Println(authors)

	// 著者を作成
	result, err := queries.CreateAuthor(ctx, tutorial.CreateAuthorParams{
		Name: "Brian Kernighan",
		Bio:  sql.NullString{String: "Co-author of The C Programming Language and The Go Programming Language", Valid: true},
	})
	if err != nil {
		return err
	}

	insertedAuthorID, err := result.LastInsertId()
	if err != nil {
		return err
	}
	log.Println(insertedAuthorID)

	// 作成した著者を取得
	fetchedAuthor, err := queries.GetAuthor(ctx, insertedAuthorID)
	if err != nil {
		return err
	}

	// trueを表示
	log.Println(reflect.DeepEqual(insertedAuthorID, fetchedAuthor.ID))
	return nil
}

func main() {
	if err := run(); err != nil {
		log.Fatal(err)
	}
}

sqlc Cloud(オプション)

sqlc Cloudを使用してクエリを検証することができます。sqlc CloudダッシュボードでプロジェクトIDを作成します。

sqlc.yamlcloudブロックを追加します:

version: "2"
cloud:
  # sqlc Cloudダッシュボードで取得したプロジェクトIDに置き換える
  project: "<PROJECT_ID>"
sql:
  - engine: "mysql"
    queries: "query.sql"
    schema: "schema.sql"
    gen:
      go:
        package: "tutorial"
        out: "tutorial"

認証トークンを設定します:

export SQLC_AUTH_TOKEN="<your sqlc auth token>"

クエリをプッシュします:

sqlc push --tag tutorial

原文:https://docs.sqlc.dev/en/latest/tutorials/getting-started-mysql.html