database - 从 PostGres 数据库获取结构

标签 database postgresql struct go

我跟着这里的一个线程想出了这个

var b Button

queryErr := connection.QueryRow("SELECT id_printer, name, has_children FROM button WHERE id_parent IS NULL;").Scan(&b.ID, &b.Name, &b.Children)
if queryErr != nil {
    response, err := json.MarshalIndent(b, "", "  ")
    fmt.Fprint(w, string(response))
    if err != nil {
        log.Println("Error on jsonmarshalindent Starter")
    }
} else {
    log.Println("Error on queryErr  starter")
    log.Println(queryErr)

    fmt.Fprint(w, "Error getting starter button")
}

它有两个问题:

  1. 它打破了 b.Children
  2. 我不知道如何动态地创建它。例如,查询返回 3 行,但这取决于公司的客户,它可以是 3 或任何数字。

结构是

type Starter struct {
    Buttons []Button `json:buttons`
}

type Button struct {
    ID       int    `json:id`
    Name     string `json:name`
    Children bool   `json:children`
}

有人可以阐明这一点吗?

最佳答案

对于bool,取决于实际列的类型。如果它不是 bool 值,则不会直接映射。

可能需要先存入一个临时变量,然后翻译赋值给Button中的字段进行匹配。

至于读取所有行,这里有一个改编自 docs 的示例.

您使用 Query 而不是 QueryRow 来获取所有行。

rows, err := db.Query("SELECT id_printer, name, has_children FROM button WHERE id_parent IS NULL;")
if err != nil {
        log.Fatal(err)
}
defer rows.Close()
var buttons []Button
for rows.Next() {
        var b Button
        if err := rows.Scan(&b.ID, &b.Name, &b.Children); err != nil {
                log.Fatal(err)
        }
        buttons = append(buttons,b)
}
// At this point, you have all your rows in the "buttons" variable

关于database - 从 PostGres 数据库获取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145775/

相关文章:

mysql - 如何编码日期以在 mysql 中进行高效查询

php - Laravel 5.1 中上传文件的安全性

sql - 如何使用 CROSS JOIN 在 PostgreSQL 中递归生成排列?

Python 结构,大小因对齐而改变。

c++ - 在成员函数中调用成员结构

arrays - 从重复范围创建函数

database - SQL Plus SP2-0306 来自 SQL 文件中的 CONNECT 行,相同的凭据在批处理文件中有效

MySQL - 两个数据库之间的更新后触发器

sql - 从一个表中获取行,并从相关表中获取 COUNT

ruby-on-rails - Rails SQL select,似乎没有按预期使用 CASE 语句