当你开始一个新的Go项目时,你可能总是问自己关于数据访问层的问题。使用通用 database/sql接口并手工编写查询,还是使用ORM包,或者使用工具来帮助生成查询?使用哪种数据库驱动?使用哪种包可以使你的工作流程快速而流畅?在这篇文章中,我们将尝试回顾一下PostgreSQL数据库的最佳可用驱动和ORM包。不幸的是,它们有很多,而且都足够好,所以选择并不容易,你必须决定什么对你最重要😉。
驱动程序
1. pgx
推荐新项目的驱动程序,积极维护和开发。低级别的,快速的,性能好的。它由两部分组成:驱动程序和工具包。驱动程序兼容于 database/sql接口,而工具包包含PostgreSQL特有的特性和功能,使你的工作更容易,例如PostgreSQL和Go之间的映射。
Github:github.com/jackc/pgx
软件包文档:pgx
2. pq
历史上最流行的Go的PostgreSQL驱动。经过良好的测试,并在许多现有项目中使用。目前只处于维护模式。正如作者自己所说。
然而,如果你正在寻找一个经过战斗考验的、稳定的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
- 复合主键、索引、限制条件
- 自动迁移
- 以及更多
Github:github.com/go-gorm/gor…
包文件。GORM
2. Bun
Bun是一个SQL优先的ORM,使用良好的旧SQL提供类似ORM的体验。它支持PostgreSQL、MySQL、MariaDB、MSSQL和SQLite。伟大的文档和基本功能,在日常工作中很有用,是它的强项。
- 批量插入
- 批量更新
- 批量删除
- 固定装置 - 使用YAML文件将初始数据加载到数据库,用于测试或演示目的
- 迁移
- 软删除
Github:github.com/uptrace/bun
软件包文档。Bun
3. ent
一个用于Go的实体框架。它是由Facebook开发的ORM,专注于基于图的数据模型。模式被定义为Go代码中的图结构,模型和操作都是通过代码生成产生的。它支持PostgreSQL、MySQL、MariaDB、TiDB、SQLite和Gremlin。
Github:github.com/ent/ent
软件包文档:ent
4. upper/db
一个为生产力而生的数据访问层。API兼容SQL和NoSQL数据库,如PostgreSQL、MySQL、MSSQL、CockroachDB、MongoDB、QL和SQLite。它提供了一个专注于处理项目集合的不可知论的API,一个用于更直接地访问数据库的SQL构建器,以及一个用于在结构体和数据库表之间进行映射并以更类似于ORM的方式处理数据库的ORM层。一些特点。
- 支持结构-表的映射
- 结果集的搜索和定界
- 限制偏移分页(页码)。
- 基于游标的分页(上一页和下一页)
- 支持交易
Github:github.com/upper/db
软件包文档:upper/db
5. XORM
简单而强大的GORM替代品,支持PostgreSQL、MySQL、SQLite、MSSQL、MariaDB、TiDB、CockroachDB和Oracle。部分功能。
- 结构 - 支持表的映射
- 支持交易
- 数据库模式的同步化
- 查询缓存
- 数据库逆向--从数据库模式生成代码的工具
- 简单的级联加载
- 支持优化锁定
- SQL生成器
- 以及更多
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。特点。
- 可测试的资源库
- 嵌套交易
- 查询生成器
- 支持急速加载
- 复合主键
- 软删除
- 分页
- 模式迁移
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