我使用的是sqlc和mysql,由于某些原因,生成的用于执行查询的代码在用于插入或查询数据库的对象的函数中没有结构或字段。
我的create table查询如下所示
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,在GetUserByUserId函数中也没有传递userId参数。
不确定我做错了什么,下面是我的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发布于 2021-09-16 10:27:32
因此,我对sqlc GitHub存储库中的问题进行了一些挖掘,并找到了解决方案here。
我的错误是我在声明mysql不能识别的查询参数时使用了$。我使用的是?,它起作用了
我的查询现在看起来像这样
-- name: CreateUser :exec
INSERT INTO users (f_name,
m_name,
l_name)
VALUES (?, ?, ?);
-- name: GetUserByUserId :one
SELECT * FROM users
WHERE user_id = ?;https://stackoverflow.com/questions/69206193
复制相似问题