🐘 Go中最好的PostgreSQL数据库驱动和ORMs

4,445 阅读4分钟

当你开始一个新的Go项目时,你可能总是问自己关于数据访问层的问题。使用通用 database/sql接口并手工编写查询,还是使用ORM包,或者使用工具来帮助生成查询?使用哪种数据库驱动?使用哪种包可以使你的工作流程快速而流畅?在这篇文章中,我们将尝试回顾一下PostgreSQL数据库的最佳可用驱动和ORM包。不幸的是,它们有很多,而且都足够好,所以选择并不容易,你必须决定什么对你最重要😉。

驱动程序

1. pgx

推荐新项目的驱动程序,积极维护和开发。低级别的,快速的,性能好的。它由两部分组成:驱动程序和工具包。驱动程序兼容于 database/sql接口,而工具包包含PostgreSQL特有的特性和功能,使你的工作更容易,例如PostgreSQL和Go之间的映射。


Github:github.com/jackc/pgx

软件包文档:pgx

2. pq

历史上最流行的Go的PostgreSQL驱动。经过良好的测试,并在许多现有项目中使用。目前只处于维护模式。正如作者自己所说。

"对于需要新功能或可靠解决报告中的错误的用户,我们推荐使用正在积极开发中的pgx。" -pq维护人员

然而,如果你正在寻找一个经过战斗考验的、稳定的Go驱动,则 pq是一个不错的选择。


Github:github.com/lib/pq

软件包文档:pg

ORMs

1. GORM

Go中最受欢迎的ORM包之一,其主要目标是对开发者友好。官方支持PostgreSQL、MySQL、SQLite和MSSQL。它被积极地开发,有很好的文档,和许多功能,比如。

  • 结构 - 支持表的映射
  • 关联(有一,有多,属于,多对多,多态,单表继承)。
  • 钩子(创建/保存/更新/删除/查找之前/之后)。
  • Preload ,急于加载。Joins
  • 交易,嵌套交易,保存点,回滚至保存点
  • 上下文,准备好的语句模式,DryRun模式
  • 批量插入,在批次中查找,用地图查找/创建,用SQL Expr和上下文估值器CRUD
  • SQL Builder, Upsert, Locking, Optimizer/Index/Comment Hints, Named Argument, SubQuery
  • 复合主键、索引、限制条件
  • 自动迁移
  • 以及更多

网站:https://gorm.io

Github:github.com/go-gorm/gor…

包文件。GORM

2. Bun

Bun是一个SQL优先的ORM,使用良好的旧SQL提供类似ORM的体验。它支持PostgreSQL、MySQL、MariaDB、MSSQL和SQLite。伟大的文档和基本功能,在日常工作中很有用,是它的强项。

  • 批量插入
  • 批量更新
  • 批量删除
  • 固定装置 - 使用YAML文件将初始数据加载到数据库,用于测试或演示目的
  • 迁移
  • 软删除

网站:https://bun.uptrace.dev

Github:github.com/uptrace/bun

软件包文档。Bun

3. ent

一个用于Go的实体框架。它是由Facebook开发的ORM,专注于基于图的数据模型。模式被定义为Go代码中的图结构,模型和操作都是通过代码生成产生的。它支持PostgreSQL、MySQL、MariaDB、TiDB、SQLite和Gremlin。


网站:https://entgo.io

Github:github.com/ent/ent

软件包文档:ent

4. upper/db

一个为生产力而生的数据访问层。API兼容SQL和NoSQL数据库,如PostgreSQL、MySQL、MSSQL、CockroachDB、MongoDB、QL和SQLite。它提供了一个专注于处理项目集合的不可知论的API,一个用于更直接地访问数据库的SQL构建器,以及一个用于在结构体和数据库表之间进行映射并以更类似于ORM的方式处理数据库的ORM层。一些特点。

  • 支持结构-表的映射
  • 结果集的搜索和定界
  • 限制偏移分页(页码)。
  • 基于游标的分页(上一页和下一页)
  • 支持交易

网站:https://upper.io

Github:github.com/upper/db

软件包文档:upper/db

5. XORM

简单而强大的GORM替代品,支持PostgreSQL、MySQL、SQLite、MSSQL、MariaDB、TiDB、CockroachDB和Oracle。部分功能。

  • 结构 - 支持表的映射
  • 支持交易
  • 数据库模式的同步化
  • 查询缓存
  • 数据库逆向--从数据库模式生成代码的工具
  • 简单的级联加载
  • 支持优化锁定
  • SQL生成器
  • 以及更多

网站:https://xorm.io/

Gitea:gitea.com/xorm/xorm

软件包文档。XORM

6. POP

它是BuffaloGo网络框架的一部分,深度集成,使用Buffalo时推荐使用。但也可以作为一个独立的数据访问层使用。POP遵循受ActiveRecord Ruby gem影响的惯例,使得它很容易用基本的ORM功能进行CRUD操作,运行迁移,并建立/执行查询。它支持PostgreSQL、CockroachDB、MySQL和SQLite数据库。


网站:https://gobuffalo.io/documentation/database/pop

Github:github.com/gobuffalo/p…

包的文档。POP

7. REL

REL是一个用于分层架构的现代ORM-ish数据访问层。它的构建考虑到了可测试性,并带有其自定义的测试库。它支持PostgreSQL、MySQL、MSSQL和SQLite。特点。

  • 可测试的资源库
  • 嵌套交易
  • 查询生成器
  • 支持急速加载
  • 复合主键
  • 软删除
  • 分页
  • 模式迁移

网站:https://go-rel.github.io

Github:github.com/go-rel/rel

包文件。REL

8. Beego ORM

这个ORM是Beego网络框架的一部分。深受Django ORM和SQLAlchemy的影响。它可以与PostgreSQL、MySQL和SQLite数据库一起工作。主要特点是:易于使用的CRUD操作,结构-表映射,原始SQL支持和查询生成器,自动连接,交易支持。


网站:https://beego.vip/docs/mvc/model/overview.md

Github:github.com/beego/beego…

包文件。Beego ORM