1
ni9ht 48 天前
GORM ?
|
2
securityCoding 48 天前 via Android 1
手动档
|
3
Ayanokouji 48 天前
|
4
emartcn 48 天前
object->json ,现在没哪个数据库不支持的。
|
5
longmeier90 OP @ni9ht 好像对表修改字段不太友好,没有深度使用
|
6
longmeier90 OP 手动挡太慢,容易出错。团队成员水平不一样,使用工具最方便
|
7
edisonwong 48 天前
gorm 里的 automigrate 。缺点在于:改已有的类型属性、或者索引改不了,比如 varchar100 ,改成 200 ,识别不了。gorm 里也有 dry run 只导出 sql
|
8
Desdemor 48 天前
参考现有的工具,自己魔改啦
|
9
lasuar 48 天前 4
我的技术栈是 go 微服务,多年经验。
以我个人经验哈,不要去依赖工具的 migration api ,这在做项目迁移/重构时是噩梦,并且对于日常的表维护不够透明。当我希望查一个表结构时,我需要去数据库才能查到,通过代码始终是不直观的,部分开发者为了图方便有时候会绕过代码直接修改表结构,这就使得代码中的映射成为摆设,长期以往,这其中的工程复杂度是难以想象的。! 我项目中对于表维护的开发流程: 1. 对于新表,在项目根目录建立 `docs/`目录,以业务为名称建立`.sql`文件,其中可以存放业务相关的一张或多张表的原始 CREATE sql 。这些文件将受到版本控制! 2. 对于旧表的更改, 例如增删字段,首先修改文件中的 CREATE sql ,其次建立`docs/log/`子目录,在子目录中新建`yyyymmdd.sql`(时间为上线日期),其中存放用于上线日改表的 ALTER sql 。 3. 上线时,上线人员(这个一般不会给脚本操作)手动执行 sql ,以及其他更新服务步骤。 这样的好处: 1. 通过`docs/`目录可以直观的看到系统中有多少业务(建了表),每个业务建表数量开发人员是基本清楚的,所以整体来说也是一目了然; 2. 在需要做整体的表结构优化时,通过`docs/`目录可以快速浏览现有表的结构特征,并制定优化方案; 3. 在需要迁移时,直接执行`docs`目录下的所有 sql 文件即可。 4. 对于做了按日期/ID 拆分的表,CREATE SQL 中的表名也要加上类型的 pattern ,以便识别:`create table xxx_$yyyymm ...`; 5. 利好开发新人; 6. 不与开发语言绑定。极端情况下,使用其他语言重构服务时会减少很多不必要的麻烦; |
11
helone 48 天前
entgo
|
12
Jinnrry 48 天前 via iPhone
和 Django 的 orm 比,不对,和其他任何语言的 orm 框架比,go 的 orm 框架就是一个弟弟
|
13
lasuar 48 天前
@liuhan907 #10 首先哈,现代化的 IDE 可以帮助你写 SQL ,其次需要维护的 SQL 都是简单的 DDL sql ,并不复杂。最后哈,基本的 sql 能力是开发人员的必备项。
|
15
ninjashixuan 48 天前
老实维护 sql 版本变更吧,这玩意还是手写让人踏实。
|
16
mogging 48 天前
GoFrame 统一管理
|
18
fffq 48 天前
|
19
yougg 48 天前
https://github.com/yougg/awesome-go-orms
已主推项目从 GORM 全面切换到 sqlc 了,包含几百张表/分表查询/各种关联查询/视图/存储过程等等,上生产稳定运行运行 1 年多。 |
20
henix 48 天前
sqlc
|
22
james122333 48 天前 via Android
记得没有 gorm 对类行改动好像很有问题
我是自己根据 struct 的 tag 组成 sql 语法 从建立资料库 建立表栏位 更改表栏位语法都生成并运行 |
23
rrfeng 48 天前
仓库里单独建个目录放好用来改变的 sql ,做好版本记录。
|
24
iyaozhen 48 天前
|
25
EscYezi 48 天前 via Android
个人感觉有个工具能对比测试库和线上库的差异比较重要。表结构个人喜欢以数据库表为核心,映射用工具生成或者手写无所谓,只要字段对的上。按这个思路的话自动迁移其实可以不用
|
26
cooltechbs 48 天前 via Android
@lasuar 同多年 Go 经验,完全同意你说的。
另外就是新项目我基本都会给大家安利 MongoDB 和 Cassandra 这些 NoSQL ,直接避开 migration 问题。只要不是需要 transaction 的交易服务那些,NoSQL 绝对更省心(除非团队里都是 SQL 老油条) |
27
lasuar 48 天前 via iPhone
@cooltechbs 大部分项目,不管是技术栈熟悉程度还是事务的方面,类 MySQL 数据库都是避不开的。
通过我说的方式来记录表结构,还有一个优势就是我不需要去完全学会那些 orm 库的各种 tag 语法。我个人认为哈,这东西完全对开发人员是一个多余的学习成本,虽然并不复杂,但是你耐不住他语法足够多还在不断更新,完全不利好语言新人。 而且这玩意和语言绑定,我最讨厌和什么东西绑定了,我现在的一个微服务项目没有使用任何框架,就是 go 加上 grpc ,注册发现都是直接用的 k8s 的 service ,做到足够简洁,如果有开发新人,他不需要学习额外太多东西。 |
28
nanpu 48 天前
gorm xorm ent
|
29
lesismal 48 天前
如果不用 orm, 可以试试我这个 github.com/lesismal/sqlw
|
31
Lychee0 48 天前 via Android
gorm gen
|
32
wwhontheway 48 天前
可以看看 gorm/gen or sqlc?
|
33
hzzhzzdogee 47 天前
gorm gen +1
|
34
Kauruus 47 天前
用 migrate 管理,但不自动执行。
用 sqlc 生成 db 模型和查询。根据需要可以手工映射一次,隔离 db 实现。 |
35
dododada 47 天前 1
兄弟们 sql 上线没有 dba 审核的么?
|
36
happy32199 47 天前 via Android
map[string]any
|
38
gvison 47 天前
通过 sql 反向生成 go struct 映射数据库代码会更简单,连接数据库后,指定表来生成对应 gorm 的 struct 代码,https://go-sponge.com/ui/web-model
|
39
guhuisec 47 天前
我用的是这个,挺好用的,每次需要哪个表就生成一下: https://github.com/xxjwxc/gormt 我的配置文件:
https://gist.github.com/haomiao33/9482a96c0ae8367a8a134ee0e9aab7a0 |
40
ninjashixuan 47 天前
怎么那么多人提 gorm gen 印象中这个只是 ddl -> orm model ,但是做不了 sql migrations 变更吧。
|
41
liuhan907 46 天前
@loading
反正本来就有开发环境、测试环境、预发布环境三个环境做测试,如果还能让 DDL 错误上线的话那还是毁灭吧。 另外,不用工具什么都自己手动做,那么在不用付出学习成本的同时也意味着什么事情都要自己花时间,并且不能享有开源项目发展带来的好处。我觉得这和现在的开发理念是背道而驰的。 |
42
linghutf 46 天前 via Android
gentool
|