gpt4 book ai didi

postgresql - 如何使用 sqlx 扫描嵌套结构?

转载 作者:行者123 更新时间:2023-12-04 07:28:44 25 4
gpt4 key购买 nike

假设我有两个模型,

    type Customer struct {
Id int `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Address Address `json:"adress"`
}

type Address struct {
Street string `json:"street" db:"street"`
City string `json:"city" db:"city"`
}

// ...

customer := models.Customer{}
err := db.Get(&customer , `select * from users where id=$1 and name=$2`, id, name)
但是这次扫描会抛出一个错误: missing destination name street in *models.Customer难道我做错了什么?如您所见,我已经更新了与该值对应的数据库。我仔细检查了所以区分大小写应该不是问题。
或者不能使用 https://github.com/jmoiron/sqlx ?
我可以在文档中看到它,但仍然无法弄清楚如何解决它。
http://jmoiron.github.io/sqlx/#advancedScanning users表声明为:
    CREATE TABLE `users` (
`id` varchar(256) NOT NULL,
`name` varchar(150) NOT NULL,
`street` varchar(150) NOT NULL,
`city` varchar(150) NOT NULL,
)

最佳答案

very link you posted为您提供有关如何执行此操作的提示:

StructScan is deceptively sophisticated. It supports embedded structs, and assigns to fields using the same precedence rules that Go uses for embedded attribute and method access


因此,鉴于您的数据库架构,您可以简单地嵌入 Address进入 Customer :
type Customer struct {
Id int `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Address
}
在您的原始代码中, Address是一个拥有自己的领域 db标签。这是不正确的,顺便说一下,您的架构没有 address列。 (看来您从代码片段中编辑了它)
通过将结构嵌入 Customer相反, Address包含标签的字段被提升为 Customersqlx将能够从您的查询结果中填充它们。
警告:嵌入该字段也会使任何 JSON 编码的输出变平。它会变成:
{
"id": 1,
"name": "foo",
"street": "bar",
"city": "baz"
}
如果您想放置 streetcity成 JSON address对象基于您的原始结构标记,最简单的方法可能是将 DB 结构重新映射到您的原始类型。
您也可以将查询结果扫描到 map[string]interface{}但是你必须小心 how Postgres data types are represented in Go .

关于postgresql - 如何使用 sqlx 扫描嵌套结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68066360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com