【发布时间】:2022-01-19 08:39:24
【问题描述】:
我在下面的代码中有查询常量createOrderQuery。此查询只是将订单插入订单表。但是这个查询中有很多样板代码,比如
$1, $2, $3, $4…。有什么办法可以去掉这个样板,让代码更清晰?
顺便说一句,我知道如何使用sqlx.db.NamedExec() 方法来做到这一点。但是没有看到这个方法与sqlx.db.Begin()相关。
const createOrderQuery = `
INSERT INTO orders(order_id, user_id, cli_order_id, type, symbol, quantity, side, filled,
timestamp, last_update_timestamp, price)
VALUES($1, $2, $3, $4, $5, $6, $7, $8,
$9, $10, $11)`
const createUsersOrdersQuery = `
INSERT INTO users_orders(user_id, order_id) VALUES ($1, $2)
`
func (k *KrakenOrdersManagerPostgres) CreateOrder(userID int, order models.Order) error {
tx, err := k.db.Begin()
if err != nil {
return err
}
_, err = tx.Exec(createOrderQuery, order.ID, order.UserID, order.ClientOrderID, order.Type, order.Symbol, order.Quantity,
order.Side, order.Filled, order.Timestamp, order.LastUpdateTimestamp, order.Price)
if err != nil {
if err := tx.Rollback(); err != nil {
return ErrCouldNotRollbackTransaction
}
return err
}
if _, err = tx.Exec(createUsersOrdersQuery, userID, order.ID); err != nil {
if err := tx.Rollback(); err != nil {
return ErrCouldNotRollbackTransaction
}
return err
}
return tx.Commit()
}
【问题讨论】:
-
这是一个很酷的包来处理样板代码github.com/volatiletech/sqlboiler
标签: sql postgresql go sqlx