首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlx获得准备语句

Sqlx获得准备语句
EN

Stack Overflow用户
提问于 2018-05-05 07:52:56
回答 1查看 5K关注 0票数 3

我正在尝试使用准备好的语句从Post命题表中获取一些数据。

如果我尝试使用database.Get(),所有内容都会返回。

表:

代码语言:javascript
复制
create table accounts
(
  id            bigserial not null
    constraint accounts_pkey
    primary key,
  identificator text      not null,
  password      text      not null,
  salt          text      not null,
  type          smallint  not null,
  level         smallint  not null,
  created_at    timestamp not null,
  updated       timestamp not null,
  expiry_date   timestamp,
  qr_key        text
);

账户结构:

代码语言:javascript
复制
type Account struct {
    ID            string `db:"id"`
    Identificator string `db:"identificator"`

    Password   string         `db:"password"`
    Salt       string         `db:"salt"`
    Type       int            `db:"type"`
    Level      int            `db:"level"`
    ExpiryDate time.Time      `db:"expiry_date"`
    CreatedAt  time.Time      `db:"created_at"`
    UpdateAt   time.Time      `db:"updated_at"`
    QrKey      sql.NullString `db:"qr_key"`
}

顺便说一下我试过用?而不是1美元和2美元

代码语言:javascript
复制
stmt, err := database.Preparex(`SELECT * FROM accounts where identificator = $1 and type = $2`)

if err != nil {
    panic(err)
}
accounts := []account.Account{}
err = stmt.Get(&accounts, "asd", 123)
if err != nil {
    panic(err)
}

我得到的错误是

"errorMessage":“结果为\u003e1列(10)的可扫描类型片”,

在表中,除了帐户(struct)中的ID外,我没有尝试删除所有字段的记录,但是它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-05 08:05:54

sqlx的文档将获取和选择描述为:

GetSelect在可扫描类型上使用rows.Scan,在不可扫描类型上使用rows.StructScan .它们大致类似于QueryRow和Query,其中Get对于获取单个结果并扫描它很有用,而Select用于获取结果的片段:

要获取单个记录,请使用Get

代码语言:javascript
复制
stmt, err := database.Preparex(`SELECT * FROM accounts where identificator = $1 and type = $2`)
var account Account
err = stmt.Get(&account, "asd", 123)

如果查询返回多条记录,请使用Select with语句如下:

代码语言:javascript
复制
stmt, err := database.Preparex(`SELECT * FROM accounts where identificator = $1 and type = $2`)
var accounts []Account
err = stmt.Select(&accounts, "asd", 123)

在您的情况下,如果您使用stmt.Select而不是stmt.Get。看起来不错。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50187083

复制
相关文章

相似问题

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