postgresql之插入数据库时如何忽略嵌入式结构字段

熊孩纸 阅读:250 2025-06-02 22:19:02 评论:0

我有2个数据库表;
A有3列,分别是X,Y,Z
B有2列,分别是X,W
我的Go结构是这样的;

type Base struct { 
    X int 
    Y int 
} 
 
type A struct { 
    Base 
    Z int 
} 
 
type B struct { 
    Base 
    W int 
} 
然后像这样初始化我的结构;
    a := A{Base: Base{X: 1, Y:2}, Z: 3} 
    b := B{Base: Base{X: 1}, W: 4} 
当我想使用gorm.io ORM将这些插入数据库时​​,插入“a”没有任何问题,但是无法插入“b”,因为postgresql给我一个类似的错误
pq: column "y" of relation "B" does not exist 
如何在不创建另一个没有“Y”字段的基本模型的情况下将“b”插入数据库?

请您参考如下方法:

当您将结构分配给另一个结构并创建该结构的实例时,所有结构字段均已填充为它们的默认数据类型值。
例如:int的默认值为0。
因此,您对此问题有2个解决方案。

  • 创建两个不同的结构(不带Base结构),仅AB。像这样:(也许您知道这个解决方案。)。
  • type A struct { 
        X int 
        Y int 
        Z int 
    } 
     
    type B struct { 
        X int 
        W int 
    } 
    
  • 使用struct tags防止使用gorm插入。

  • 注意:我没有测试过。
    type Base struct { 
        X int  
        Y int `json:"y,omitempty"` 
    } 
     
    type A struct { 
        Base 
        Z int 
    } 
     
    type B struct { 
        Base 
        W int 
    } 
    


    标签:数据库
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号