使用 sqlx 插入行,是否可以避免显式列出字段?

insert rows with sqlx, is it possible to avoid listing the fields explicitly?

我正在使用 sqlx 库,如下所示:

type MyData {
    Field1 string `json:"db:field1"`
    Field2 string `json:"db:field2"`
}

...

res, err := db.Exec("INSERT INTO XXX (field1, field2) VALUES (?, ?)", data.XX, data.XX)

是否可以避免明确指定“field1,field2”,让 sqlx 自动创建查询和绑定,例如

db.Exec2("table_name", data)

我没有找到相关的方法。

没有。包 sqlx 只是 DB 驱动程序的包装器。它不是 ORM。它需要用户提供的有效 SQL 查询字符串。您可以通过编程方式构造查询字符串,并设计一些方法来使用 reflect 包从结构标签构建列名,但为什么要重新发明轮子呢?使用较低级别的包作为 sqlx 的好处恰恰是维护您自己的查询,以换取不在您的代码库中引入 ORM 框架。相反,使用 ORM 则相反。

Gorm instead has a set of conventions 即开即用。您甚至不必指定数据库标签:

GORM prefer convention over configuration, by default, GORM uses ID as primary key, pluralize struct name to snake_cases as table name, snake_case as column name, and uses CreatedAt, UpdatedAt to track creating/updating time

type MyData {
    Field1 string `json:"field1"`
    Field2 string `json:"field2"`
}

data := MyData {
    Field1: "foo", 
    Field2: "bar",
}

result := db.Create(&data) 
// results in something like this:
// INSERT INTO my_datas (field1, field2) VALUES ('foo', 'bar')