sqlcの使い方
インストール
私の環境だとインストール時に C 言語のパスが解決できなかったので、直接バイナリファイルを GitHub からインストールしました。
Windows 環境のため、sqlc_X.XX.X_windows_amd64.zipをダウンロード
下記コマンドでバージョン情報が出力されれば成功です。
sqlc version
> vX.XX.Xコード生成
version: "2"
sql:
- engine: "postgresql"
queries: "query.sql"
schema: "schema.sql"
gen:
go:
package: "tutorial"
out: "tutorial"
sql_package: "pgx/v5"-
engine使用する RDBMS を指定
指定可能値 :
postgresql,sqlite,mysql -
schemaSQL ファイルか、ファイルが入っているディレクトリを指定
-
queriesSELECT,INSERT,UPDATE,DELETEの実行クエリを記述するディレクトリかファイルを指定 -
gen生成する言語を指定。Go 以外にも Python などを指定可能
-
package生成される Go のパッケージ名
-
out生成コードの出力先ディレクトリ
-
sql_package生成されるコードで使用する SQL パッケージ
指定可能 :
pgx/v4,pgx/v5,database/sql -
emit_json_tagstrue の場合、struct フィールドに
json:"xxx"を付与する -
emit_db_tagsstruct フィールドに
db:"column_name"を付与するかどうか -
emit_prepared_queriestrue の場合 Prepared Statement 版のクエリ関数を生成する
-
emit_interfacetrue の場合、生成コードに interface を生成する
-
emit_exact_table_namestrue の場合、構造体名はテーブル名になる
-
emit_empty_slicestrue の場合、:many クエリの返り値は nil ではなく空スライスになる
公式サイトから参考データを使って生成します。
CREATE TABLE authors (
id BIGSERIAL PRIMARY KEY,
name text NOT NULL,
bio text
);-- name: GetAuthor :one
SELECT * FROM authors
WHERE id = $1 LIMIT 1;
-- name: ListAuthors :many
SELECT * FROM authors
ORDER BY name;
-- name: CreateAuthor :one
INSERT INTO authors (
name, bio
) VALUES (
$1, $2
)
RETURNING *;
-- name: UpdateAuthor :exec
UPDATE authors
set name = $2,
bio = $3
WHERE id = $1;
-- name: DeleteAuthor :exec
DELETE FROM authors
WHERE id = $1;ファイル構成
.
├── go.mod
├── query.sql
├── schema.sql
└── sqlc.yaml下記コマンド実行で、コードが生成されます。
sqlc generateこのようなファイル構成になったら成功です。
.
├── go.mod
├── query.sql
├── schema.sql
├── sqlc.yaml
└── tutorial
├── db.go
├── models.go
└── query.sql.go