为了账号安全,请及时绑定邮箱和手机立即绑定

使用 go-pg 从 Postgres 中检索虚拟列

使用 go-pg 从 Postgres 中检索虚拟列

Go
斯蒂芬大帝 2022-05-18 15:42:17
我正在使用go-pg(https://github.com/go-pg/pg)和这段代码:type Book struct {  id   int  name string}var books []Bookerr := db.Model(&books).Select()一切正常,但我需要添加一个像这样的“虚拟”列:concat ('info:', 'id:', id, '...') AS info我尝试使用:query.ColumnExpr("concat ('info:', 'id:', id, '...') AS info")但:go-pg 抱怨:error="pg: can't find column=info in model=Book (try discard_unknown_columns)"go-pg 不再包含列id并且name在查询中:concat...仅!我可以理解,因为现在 go-pg 不知道如何绑定数据,但我真的需要只能从数据库中检索的字符串。有办法吗?我可以使用下面这样的自定义类型吗?type CustomBook struct {  Info string  Book}这有意义吗?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这种方法可以为你工作:


type Book struct {

  ID   int

  Name string

  Info string `pg:"-"`

}


...

db.Model(&books).ColumnExpr("book.*").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select()


pg:"-"忽略结构字段并且它没有被创建也不会产生任何错误


这个被忽略的列记录在这里:https ://pg.uptrace.dev/models/


另一种方法,根据您的要求,可能是这样的:


var r []struct {

  Name string

  Info string

}


db.Model((*Book)(nil)).Column("name").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select(&r)

第二个记录在这里:https ://pg.uptrace.dev/queries/


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号