postgresql - 如何正确使用 go-pg 执行 queryOne?
问题描述
我想queryOne
使用go-pg
它只返回一行到一个对象而不是数组。
这是我的简单代码:
var reportMessage *ReportMessage
_, err := db.Model((*ReportMessage)(nil)).QueryOne(&reportMessage, `
SELECT
SUM(total_order) total_order,
SUM(total_message) total_message,
SUM(hsm_message) hsm_message ,
SUM(outbound_message) outbound_message ,
SUM(inbound_message) inbound_message ,
SUM(total_order_amount) total_order_amount
FROM report_message rm WHERE seller_id =? and "date" between ? and ?;
`, sellerID, dateStart, dateEnd)
if err != nil {
return nil, err
}
return reportMessage, nil
type ReportMessage struct {
ID string `json:"id"`
SellerID string `json:"seller_id"`
TotalOrder int `json:"total_order"`
Date time.Time `json:"date"`
HsmMessage int `json:"hsm_message"`
TotalMessage int `json:"total_message"`
OutboundMessage int `json:"outbound_message"`
InboundMessage int `json:"inbound_message"`
TotalOrderAmount float32 `json:"total_order_amount"`
}
我希望它只返回reportMessage 而不是一个数组。
这是我的错误:
json: cannot unmarshal number into Go value of type models.ReportMessage
如何只查询一行并将其返回给对象而不是数组?
解决方案
您需要初始化模型的一个实例并传递一个指向该实例的指针,而不是传递一个指向模型未初始化的 nil 指针的指针。
reportMessage := new(ReportMessage)
_, err := db.Model((*ReportMessage)(nil)).QueryOne(reportMessage, `
SELECT
SUM(total_order) total_order,
SUM(total_message) total_message,
SUM(hsm_message) hsm_message ,
SUM(outbound_message) outbound_message ,
SUM(inbound_message) inbound_message ,
SUM(total_order_amount) total_order_amount
FROM report_message rm WHERE seller_id =? and "date" between ? and ?;
`, sellerID, dateStart, dateEnd)
if err != nil {
return nil, err
}
return reportMessage, nil
推荐阅读
- c# - 端点和自定义中间件导致异常
- docker - docker compose 上的 Quasar 和 webpack devServer ECONNREFUSED
- javascript - Discord Bot 嵌入消息
- flutter - 为什么构造函数中需要密钥?
- firebase - 如何检查用户的数据在哪个集合中?云防火墙
- typescript - 打字稿:使用条件类型和可选变量将一个字符串映射到另一个
- javascript - JS不能通过索引改变值
- react-native - react-native-chart-kit 图表到图像
- python - 如何使用 sckit-learn 进行多种分类
- vb.net - 打印 TableLayoutPanel,标签属性不适用于 Drawstring