Golang中ORM/Query Builder工具推荐

Golang中ORM/Query Builder工具推荐 大家好,

我正在寻找一个类似于 Jooq(https://www.jooq.org/)的建议,它能够连接到实时数据库,并根据实时数据库模式生成模型文件。

我查看了 SQLBoiler,但似乎它在处理多个 PostgreSQL 模式时存在问题。

有没有人找到任何他们喜欢并愿意推荐的好工具?

7 回复

我明白了,是的,我们没有这个功能,这不是 rel 的目标。

更多关于Golang中ORM/Query Builder工具推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不用担心,针对不同的需求有各种各样的工具。开源软件的魅力就在于选择。😊

感谢您的建议。

如果你感兴趣,可以看看我的项目 https://fs02.github.io/rel/ 其目标并非成为一个查询构建器,但它确实内置了该功能。

PS:我是作者 🙂

看起来很不错,文档也很完善,这对于一个开源项目来说总是一个卖点。

我特别在寻找一种能够内省实时数据库并根据数据库模式构建其查询对象的功能。我认为您目前没有这个功能。

如果我错过了,请告诉我。

尝试访问 https://github.com/avelino/awesome-go。在 ORM 主题下,我猜大概有 21 个不同的选项。如果你还需要其他东西,这是我目前找到的最好的 Go 项目精选列表。

谢谢。我最终选择了 https://github.com/volatiletech/sqlboiler,不过 https://github.com/xo/xo 看起来也很有趣。

Awesome Go 很棒。我总是忘记它,尽管我以前看过。

对于需要类似Jooq功能的Go开发者,我推荐以下两个工具:

1. sqlc - 强烈推荐

sqlc能够根据SQL查询自动生成类型安全的Go代码,支持PostgreSQL多模式。

-- query.sql
-- name: GetUser :one
SELECT * FROM public.users WHERE id = $1;

-- name: GetOrders :many
SELECT * FROM sales.orders WHERE user_id = $1;
# sqlc.yaml
version: "2"
sql:
  - schema: "schema/public"
    queries: "query.sql"
    engine: "postgresql"
    gen:
      go:
        package: "db"
        out: "internal/db"
  - schema: "schema/sales"
    queries: "query.sql"
    engine: "postgresql"
    gen:
      go:
        package: "db"
        out: "internal/db"

生成代码示例:

// db/models.go
type User struct {
    ID   int64
    Name string
}

type Order struct {
    ID     int64
    UserID int64
    Amount float64
}

// db/query.sql.go
func (q *Queries) GetUser(ctx context.Context, id int64) (User, error) {
    // 自动生成的类型安全代码
}

func (q *Queries) GetOrders(ctx context.Context, userID int64) ([]Order, error) {
    // 自动生成的类型安全代码
}

2. xo - 另一个优秀选择

xo支持从数据库模式生成Go代码,对PostgreSQL多模式有良好支持。

# 生成不同模式的代码
xo pgsql://user:pass@host/db -o models --schema public
xo pgsql://user:pass@host/db -o models --schema sales

生成的结构体:

// Public schema tables
type User struct {
    ID        int64     `db:"id"`
    Username  string    `db:"username"`
    CreatedAt time.Time `db:"created_at"`
}

// Sales schema tables  
type Order struct {
    ID          int64     `db:"id"`
    UserID      int64     `db:"user_id"`
    TotalAmount float64   `db:"total_amount"`
    OrderDate   time.Time `db:"order_date"`
}

这两个工具都能处理PostgreSQL多模式场景,sqlc更注重类型安全的查询生成,xo则更接近传统的ORM代码生成。

回到顶部