首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang SQLC不生成结构

Golang SQLC不生成结构
EN

Stack Overflow用户
提问于 2021-09-16 09:51:33
回答 1查看 170关注 0票数 0

我使用的是sqlc和mysql,由于某些原因,生成的用于执行查询的代码在用于插入或查询数据库的对象的函数中没有结构或字段。

我的create table查询如下所示

代码语言:javascript
复制
CREATE TABLE users (
    user_id int PRIMARY KEY,
    f_name varchar(255) NOT NULL,
    m_name varchar(255),
    l_name varchar(255) NOT NULL
);

查询如下所示

代码语言:javascript
复制
-- 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;

这就是生成的内容

代码语言:javascript
复制
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文件的样子

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-09-16 10:27:32

因此,我对sqlc GitHub存储库中的问题进行了一些挖掘,并找到了解决方案here

我的错误是我在声明mysql不能识别的查询参数时使用了$。我使用的是?,它起作用了

我的查询现在看起来像这样

代码语言:javascript
复制
-- name: CreateUser :exec
INSERT INTO users (f_name,
                   m_name,
                   l_name)
VALUES (?, ?, ?);

-- name: GetUserByUserId :one
SELECT * FROM users
WHERE user_id = ?;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69206193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档