V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beegcom
V2EX  ›  Go 编程语言

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

  •  
  •   beegcom · 2019-01-23 03:45:35 +08:00 · 2933 次点击
    这是一个创建于 2166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在做一个需求:使用 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 库是否支持类似我的需求那样、允许运行时动态定义数据列和数据类型的操作呢?
    6 条回复    2019-11-11 20:28:58 +08:00
    jicg
        1
    jicg  
       2019-01-23 11:54:57 +08:00 via iPhone   ❤️ 1
    这个不是 orm 框架的存在的意义了,建议还是手拼语句,
    beegcom
        2
    beegcom  
    OP
       2019-01-23 19:28:10 +08:00
    @jicg 我目前看了 gorm,作为对象的定义媒介是 struct,请问没有以 map[string]interface{} 作为媒介的 golang ORM 吗?
    jicg
        3
    jicg  
       2019-01-24 09:39:24 +08:00
    @beegcom 我们找到过,这个可以自己写的,数据库的 schema 来的
    jicg
        4
    jicg  
       2019-01-24 09:39:47 +08:00
    @jicg 没发现
    abcbuzhiming
        5
    abcbuzhiming  
       2019-02-02 23:02:21 +08:00
    我很认真的和楼主说,如果你的表结构差异较大,你仍然想用动态表结构的话,这其实是动态语言可以用对象或 map 结构保存数据的遗毒,我建议你尽快抛弃这个想法。为了你自己的想着想。无论是什么类型的数据库,scheme 都是只有意义的,混淆 scheme 都会给你的项目带来混乱
    HuaWan
        6
    HuaWan  
       2019-11-11 20:28:58 +08:00
    哈,我也有类似的想法;想着很多表都是简单的 CRUD 操作,不要重复写 model,control 等逻辑;思考了一圈,发现无果。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:25 · PVG 00:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.