mysql - Golang SQLC 不生成结构
问题描述
我正在使用 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
解决方案
所以我在 sqlc GitHub repo 上的问题做了一些挖掘,并在这里找到了解决方案
我的错误是我$
在声明 mysql 无法识别的查询参数时使用。我?
改用它并且它有效
我的查询现在看起来像这样
-- name: CreateUser :exec
INSERT INTO users (f_name,
m_name,
l_name)
VALUES (?, ?, ?);
-- name: GetUserByUserId :one
SELECT * FROM users
WHERE user_id = ?;
推荐阅读
- django - 如何将 Pdf 数据从服务器提供给客户端。(姜戈)
- go - 使用 Golang 客户端在 Kubernetes 中创建 Secret 的问题
- c - 我的代码有什么问题(它没有调用该函数)?
- java - 同一个 Java eclipse 项目中的多个 META-INF 文件夹
- javascript - html表单行上两个输入表元素值的乘法不起作用(Google Webapp)
- angular - highchart 地图:mapbubble 为同一国家/地区的气泡系列设置自定义 x、y 坐标
- c# - 检测现代待机中的电源状态变化
- r - 使用函数内的逻辑条件访问全局向量分量
- reactjs - 找不到 React 模块?
- jquery - 我想从我通过 ajax 函数提供的 id 中获取订单号,但没有成功显示值:function(response)