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

如何将Bob SQL Access Toolkit与pgx连接池集成?

解决方案

要让Bob SQL Toolkit和pgx连接池集成,核心是把pgx的连接/连接池转换成Bob要求的Executor接口实现。Bob官方提供了专门适配pgx的工具包,直接用它就能快速搞定:

步骤1:导入适配包

首先确保你引入了Bob的pgx适配模块:

import "github.com/stephenafamo/bob/dialect/psql/bobpgx"

方式一:直接用pgx连接池作为Executor(推荐)

不需要手动获取连接,Bob会自动从池里管理连接的获取和释放,代码更简洁:

ctx := context.Background()
pool, err := pgxpool.New(context.Background(), os.Getenv("DATABASE_URL"))
// 补全你的错误处理逻辑
defer pool.Close()

// 把pgx连接池包装成Bob可识别的Executor
executor := bobpgx.NewExecutor(pool)

query := psql.Select(sm.From("categories"), sm.Where(psql.S("id").EQ(psql.Arg(id))))
result, err := bob.One(ctx, executor, query, scan.StructMapper[model.Category]())
// 处理result和err

方式二:用手动获取的pgx连接作为Executor

如果需要手动控制连接的生命周期(比如在同一个连接里执行多个事务),可以用已获取的*pgx.Conn来创建Executor:

ctx := context.Background()
pool, err := pgxpool.New(context.Background(), os.Getenv("DATABASE_URL"))
// 错误处理
defer pool.Close()

conn, err := pool.Acquire(ctx)
// 错误处理
defer conn.Release()

// 注意这里要传入conn.Conn(),拿到底层的*pgx.Conn对象
executor := bobpgx.NewExecutor(conn.Conn())

query := psql.Select(sm.From("categories"), sm.Where(psql.S("id").EQ(psql.Arg(id))))
result, err := bob.One(ctx, executor, query, scan.StructMapper[model.Category]())
// 处理结果

原理说明

bobpgx.NewExecutor会帮你完成接口适配:它接收pgx的Pool或Conn类型,返回一个实现了Bob Executor接口的对象,自动处理SQL语句的执行、参数传递等底层逻辑,不需要你自己手动实现接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:35:03