如何将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
相关产品推荐
相关产品推荐

