在golang xorm中使用postgresql的json,array类型的操作

在golang xorm中使用postgresql的json,array类型的操作可以通过以下步骤完成:

1. 声明结构体并设置相关参数

type User struct {
    Id      int64    `xorm:"pk autoincr"`
    Name    string   `xorm:"varchar(25) notnull"`
    Age     int      `xorm:"int notnull"`
    Profile Profile  `xorm:"jsonb"`
    Emails  []string `xorm:"text[]"`
}

type Profile struct {
    Avatar string `json:"avatar"`
    Gender string `json:"gender"`
    Extra  string `json:"extra,omitempty"`
}

engine, _ := xorm.NewEngine("postgres", "dbname=test user=postgres password=root host=localhost port=5432 sslmode=disable")
engine.SetMapper(core.SameMapper{})
engine.SetTableMapper(core.SnakeMapper{})

其中 Profile 是一个嵌套的结构体,表示用户个人资料,其中使用了json标记来使得该结构实现一个 jsonb 值,Emails 是一个字符串数组。

2. 创建数据表并插入数据

err := engine.Sync2(new(User))
if err != nil {
    log.Fatalf("sync database failed: %v\n", err)
}

user := &User{
    Name: "jack",
    Age:  23,
    Profile: Profile{
        Avatar: "http://baidu.com",
        Gender: "male",
        Extra:  "",
    },
    Emails: []string{"abc@abc.com", "abc@efg.com"},
}
affected, err := engine.Insert(user)
if err != nil {
    log.Fatalf("insert error: %v, user: %v\n", err, user)
}
fmt.Printf("inserted %d rows\n", affected)

首先,我们需要执行 Sync2 方法来同步 User 结构体和数据表。然后我们创建了一个 User 示例并进行数据插入操作。

3. 查询数组 Emails

var user User
has, err := engine.Where("age > ?", 0).And("name = ?", "jack").Get(&user)
if err != nil {
    log.Fatalf("get error: %v", err)
}
if has {
    fmt.Printf("user.Name: %v\n", user.Name)
    fmt.Printf("user.Emails: %#v\n", user.Emails)
}

利用 WhereGet 方法,我们可以在 xorm 中完成查询语句的建立和查询结果的获取。由于 Emails 在表中的列类型为 text[],在用户结构体中使用的类型是 []string,xorm会为我们自动转换和映射类型,同时查询结果的 user.Emails 属性也是一个 []string 类型。

4. 修改JSON Profile

affected, err = engine.ID(user.Id).Cols("profile").Update(&User{
    Profile: Profile{
        Avatar: "http://google.com",
        Gender: "male",
        Extra:  "",
    },
})
if err != nil {
    log.Fatalf("update error: %v", err)
}
fmt.Printf("update %d rows\n", affected)

使用 Cols 方法指定你要更新的列。在这个例子中,我们只更新了 Profile 列,但是由于我们仅提供了我们想要更新的子列,因此 xorm 只会更改这些值并留下剩余的任何值不变。

5. 查询JSON Profile

has, err = engine.Where("name=?", "jack").Get(&user)
if err != nil {
    log.Fatalf("get error: %v", err)
}
if has {
    fmt.Printf("user.Name: %v\n", user.Name)
    fmt.Printf("user.Profile.Avatar: %v\n", user.Profile.Avatar)
}

使用 WhereGet 方法可以查询 User 数据结构,并实现查询结果的获取。在这个例子中,我们查询了 Profile.Avatar 的值以确认 update 功能已经完成。

总的来说,以上步骤就是使用 golang xorm 中操作 PostgreSQL 中的 json,array 类型的操作的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在golang xorm中使用postgresql的json,array类型的操作 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 浅谈go中cgo的几种使用方式

    浅谈 Go 中 Cgo 的几种使用方式 Cgo 是 Go 语言中的一个重要特性,它可以被用来在 Go 代码中调用 C 语言函数。Cgo 是 Go 语言最独特的特性之一,它可以让开发者直接使用 C 代码功能,也可以将 Go 代码转为 C 代码,这样就可以在 Go 中直接使用 C 库,同时也能够保证 Go 语言的安全性。 Cgo 中的基本使用 使用 Cgo 调用…

    C 2023年5月23日
    00
  • linux vim 操作笔记

    Linux Vim 操作笔记 简介 Vim 是一款集文本编辑、文本格式化等为一体的强大编辑器,常用于 Linux 系统下进行文件的编辑和处理。本篇笔记主要介绍 Vim 的基本操作和常用功能,帮助初学者快速入门。 基本操作 打开文件 使用 Vim 打开文件可以直接在终端输入: vim 文件名 如果文件不存在,会自动新建一个空白文件。 退出 Vim 关闭正在编辑…

    C 2023年5月22日
    00
  • 在Python 中将类对象序列化为JSON

    序列化(Serialization)指的是将数据结构或对象状态转换为可以存储或传输的格式的过程。其中,将数据转换成JSON格式是常见的序列化方式之一。Python 中提供了通用的序列化模块 json 来实现将数据转换为JSON格式,其中也包括对象的序列化操作。 下面是将 Python 类对象序列化为 JSON 的完整操作步骤: 导入 JSON 模块 json…

    C 2023年5月23日
    00
  • CrashRpt使用案例详解

    CrashRpt使用案例详解 简介 CrashRpt是一款用于记录和上报应用程序崩溃信息的库。它能够捕捉应用程序崩溃时的调用栈、CPU状态、内存信息等重要数据,并将这些信息打包成压缩文件并保存到本地硬盘,同时也可以将这些信息发送到云端。CrashRpt库适用于Windows操作系统,支持C++和一些其他语言,如C#、Python等。 安装 下载CrashRp…

    C 2023年5月23日
    00
  • C语言接口与实现方法实例详解

    C语言接口与实现方法实例详解 什么是C语言接口? C语言接口是指从一个函数/模块/库/程序到另一个函数/模块/库/程序的连接方法。C语言接口可以简化代码的复杂程度,提高代码的可重用性和可维护性。 C语言接口的实现方法 C语言接口一般分为两个部分:接口定义及接口实现。接口定义一般包含函数签名(函数名及其参数类型),而接口实现包含实现该接口函数的代码。 接口定义…

    C 2023年5月23日
    00
  • C++示例详解Prim算法与优先队列

    C++示例详解Prim算法与优先队列 什么是Prim算法? Prim算法是一种经典的最小生成树算法,它可以用于求无向连通图的最小生成树。该算法以一个顶点开始,通过不断地向外扩张生成最小生成树,最终遍历图中所有节点,并且每次扩张的时候选择权值最小的边。 Prim算法的实现流程 选取一个起始节点开始。 初始化辅助数组,该数组用来记录图中每个节点是否已经被访问,以…

    C 2023年5月23日
    00
  • 常用的C语言编程工具汇总

    常用的C语言编程工具汇总 概述 C语言是一种非常流行的高级编程语言,开发者们常常使用各种工具来编写、调试、测试他们的C代码。在这里我们进行简单的介绍,列出一些主要的C语言编程工具及其用途。 编辑器 编辑器是C语言编程过程中最基本的工具之一。通常用来编写代码。常用的C语言编辑器有: 1. Visual Studio Code Visual Studio Cod…

    C 2023年5月23日
    00
  • Linux中文件系统truncate.c详解

    Linux中文件系统truncate.c详解 什么是truncate.c文件 truncate.c文件是Linux内核中负责处理文件截断操作的核心文件。其主要功能是截断指定文件的长度,可以对文件进行缩短或扩展。在Linux系统的文件系统中,文件截断操作是文件的常用操作之一。 truncate.c文件操作示例 1. 文件截断操作 truncate.c文件主要包…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部