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.go
、models.go
、query.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.yaml
にcloud
ブロックを追加します:
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