我有这个模型数据结构:
type Order struct {
OrderEntry OrderEntry `db:"order"`
}
type OrderEntry struct {
Order_uid string
Track_number string
Entry string
Delivery Delivery
Payment Payment
Items []Item
Locale string
Internal_signature string
Customer_id string
Delivery_service string
Shardkey string
Sm_id int64
Date_created string
Oof_shard string
}
type Delivery struct {
...
}
type Payment struct {
...
}
type Item struct {
...
}
我有table
CREATE TABLE "order"
(
"order" jsonb NOT NULL
);
如何在这个psq表中插入Order对象?我使用sqlx和此代码即时通讯得到错误
func (r *RepositoryPostgres) CreateDocument(order L0.Order) error {
tx := r.db.MustBegin()
tx.MustExec("INSERT INTO order (order) VALUES ($1)", order.OrderEntry)
err := tx.Commit()
if err != nil {
return err
}
return nil
}
panic:sql:converting argument $1 type:不支持的类型L0.OrderEntry,结构
如何正确解决这一问题?谢谢
2条答案
按热度按时间lnlaulya1#
INSERT语句的不受支持的类型“L0.OrderEntry”是导致您遇到问题的原因。“L0.OrderEntry”不能直接输入到JSONB列中,因为它是“L0.Order”中的嵌套结构。相反,在将OrderEntry对象输入到表中之前,必须将其封送到JSON表示形式中。
您可以按如下所示更改代码来解决此错误。
order.OrderEntry对象在修改后的代码中使用“json.Marshal”方法编组为JSON。然后将生成的JSON字节切片(orderJSON)作为值提供给INSERT语句。
您可以通过将嵌套结构编组到JSON中来确保数据采用正确的格式插入到JSONB列中。
tzdcorbm2#
你需要做一些改变。
1.您需要将要存储的结构封送为JSON。您可以使用以下命令执行此操作:
这将把你的结构体存储为表中的JSON字节数组。
1.为了正确地从结构体生成JSON,您需要向每个字段添加JSON结构体标记。例如:
您可以按照自己的喜好来命名它们,snake-case是常见的格式。这些标记向解析器提供JSON字段的名称。
如果没有这些字段,您最终将得到空JSON,并且您将无法检索数据。