Golang Go语言的ORM框架是否支持动态表结构操作?

发布于 1周前 作者 vueper 来自 Go语言

Golang Go语言的ORM框架是否支持动态表结构操作?
最近在做一个需求:使用 Go 语言做一个数据仓库服务,底层采用 MySQL 存储,上层提供友好的接口。 接口允许调用方自行决定数据存储的变量名(可以映射为数据库的列名),数据类型(映射为 MySQL 的部分数据类型)。

针对这个需求,我们考虑 Go 的几个 ORM 库。但是呢,以 gorm 为例,给出的例子都需要给定一个 struct,然后根据这个 struct 的结构和类型定义,存取 DB。如:

type Post struct {
Id int orm:"auto"
Title string orm:"size(100)"
User *User orm:"rel(fk)"
}

var posts []*Post
qs := o.QueryTable(“post”)
num, err := qs.Filter(“User__Name”, “slene”).All(&posts)

那么请问,golang 的 ORM 库是否支持类似我的需求那样、允许运行时动态定义数据列和数据类型的操作呢?


更多关于Golang Go语言的ORM框架是否支持动态表结构操作?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

这个不是 orm 框架的存在的意义了,建议还是手拼语句,

更多关于Golang Go语言的ORM框架是否支持动态表结构操作?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我目前看了 gorm,作为对象的定义媒介是 struct,请问没有以 map[string]interface{} 作为媒介的 golang ORM 吗?

我们找到过,这个可以自己写的,数据库的 schema 来的

我很认真的和楼主说,如果你的表结构差异较大,你仍然想用动态表结构的话,这其实是动态语言可以用对象或 map 结构保存数据的遗毒,我建议你尽快抛弃这个想法。为了你自己的想着想。无论是什么类型的数据库,scheme 都是只有意义的,混淆 scheme 都会给你的项目带来混乱

哈,我也有类似的想法;想着很多表都是简单的 CRUD 操作,不要重复写 model,control 等逻辑;思考了一圈,发现无果。

关于Golang(Go语言)的ORM框架是否支持动态表结构操作的问题,通常来说,大部分传统的关系型数据库ORM框架(如GORM、XORM等)并不直接支持动态表结构操作。这些ORM框架通常要求预先定义好数据模型(struct),然后根据模型的结构和类型来存取数据库。

动态表结构操作,如动态列和动态类型的定义,在关系型数据库中并不常见,因为这需要数据库在运行时能够动态地修改其表结构,而这在大多数关系型数据库中是不被支持的。

然而,如果你确实需要动态表结构的功能,可以考虑以下几种替代方案:

  1. 使用非关系型数据库:如MongoDB等,它们天然支持动态数据结构,非常适合需要频繁修改数据模型的应用场景。
  2. 使用JSON字段:在关系型数据库中,可以使用JSON类型的字段来存储动态数据。这样,虽然表结构是固定的,但你可以在JSON字段中存储任意结构的数据。
  3. 自定义ORM实现:如果你有特定的需求,并且现有的ORM框架无法满足,你可以考虑自己实现一个支持动态表结构的ORM框架。

总的来说,选择哪种方案取决于你的具体需求和项目场景。

回到顶部