You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sqlx中执行无参数纯SQL语句 解决sqlx.Exec不存在报错

sqlx调用Exec方法报错解决方案

报错根因

sqlx包本身未提供包级别的Exec/Query执行方法,这类SQL执行方法仅绑定在已初始化的*sqlx.DB数据库连接实例、*sqlx.Tx事务实例上,直接调用sqlx.Exec会触发方法不存在的报错。

正确操作流程

  • 首先初始化数据库连接,获取*sqlx.DB实例
// 引入依赖
import (
    "github.com/jmoiron/sqlx"
    _ "github.com/go-sql-driver/mysql" // 替换为对应数据库的驱动
)

func initDB() (*sqlx.DB, error) {
    // 第一个参数为数据库驱动名,第二个为数据库连接DSN
    db, err := sqlx.Connect("mysql", "root:123456@tcp(127.0.0.1:3306)/test_db?charset=utf8mb4")
    if err != nil {
        return nil, err
    }
    return db, nil
}
  • 调用实例的Exec方法执行无参数SQL
func main() {
    db, err := initDB()
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 执行无参数纯SQL,比如建表、删表等操作
    _, err = db.Exec(`CREATE TABLE IF NOT EXISTS student (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(32) NOT NULL,
        age INT NOT NULL DEFAULT 0
    )`)
    if err != nil {
        panic(err)
    }
}
  • 无参数查询场景可调用Query/Select方法
type Student struct {
    Id int `db:"id"`
    Name string `db:"name"`
    Age int `db:"age"`
}

// 查询所有学生
var students []Student
err = db.Select(&students, "SELECT * FROM student")
if err != nil {
    panic(err)
}

注意:如果你在事务中执行SQL,调用*sqlx.Tx实例的Exec方法即可,用法和*sqlx.DB完全一致。

内容的提问来源于stack exchange,提问作者ccd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:06:02