【问题标题】:How to make clear INSERT like queries in Go sqlx?如何在 Go sqlx 中明确 INSERT 之类的查询?
【发布时间】: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()
}

【问题讨论】:

标签: sql postgresql go sqlx


【解决方案1】:

您可以使用github.com/Masterminds/squirrel 包:

import sq "github.com/Masterminds/squirrel"

...

sql, args, err := sq.
Insert("orders").Columns("order_id", "user_id", "cli_order_id", "type", "symbol", "quantity", "side", "filled", "timestamp", "last_update_timestamp", "price").
Values(order.ID, order.UserID, order.ClientOrderID, order.Type, order.Symbol, order.Quantity,
    order.Side, order.Filled, order.Timestamp, order.LastUpdateTimestamp, order.Price).
ToSql()

 _, err = tx.Exec(sql, args...)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2021-09-18
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多