我正在使用 sqlc 和 mysql,由于某种原因,生成的用于执行查询的代码在应该插入或查询数据库的对象的函数中没有结构或字段。
我的创建表查询与此类似
CREATE TABLE users (
user_id int PRIMARY KEY,
f_name varchar(255) NOT NULL,
m_name varchar(255),
l_name varchar(255) NOT NULL
);
查询看起来像这样
-- name: CreateUser :exec
INSERT INTO users (f_name,
m_name,
l_name)
VALUES ($1, $2, $3);
-- name: GetUserByUserId :one
SELECT * FROM users
WHERE user_id = $1;
这是生成的
const createUser = `-- name: CreateUser :exec
INSERT INTO users (
f_name,
m_name,
l_name)
VALUES ($1, $2, $3)
`
func (q *Queries) CreateUser(ctx context.Context) error {
_, err := q.db.ExecContext(ctx, createUser)
return err
}
const getUserByUserId = `-- name: GetUserByUserId :one
SELECT f_name, m_name, l_name FROM users
WHERE user_id = $1
`
func (q *Queries) GetUserByUserId(ctx context.Context) (User, error) {
row := q.db.QueryRowContext(ctx, getUserByUserId)
var i User
err := row.Scan(
&i.UserID,
&i.FName,
&i.MName,
&i.LName
)
return i, err
}
正如您在生成的代码中看到的那样,createUser
没有生成可以反过来将函数参数传递给的结构CreateUser
,对于getUserByUserId
没有在函数中传递的 userId 参数也是如此GetUserByUserId
。
不确定做错了什么,这是我的sqlc.yaml
文件的样子
version: "1"
packages:
- name: "db"
path: "./db/sqlc"
queries: "./db/query/"
schema: "./db/migration/"
engine: "mysql"
emit_json_tags: true
emit_prepared_queries: false
emit_interface: false
emit_exact_table_names: false