golang的postgreSQL框架go-pg常用操作汇总

news/2024/10/18 1:27:24/

增删改查一应俱全;如果有没列出来的,请留言作者补上。

收藏备忘,快速查阅!

目录

查询指定列

举例1:根据主键直接查询

举例2:查询指定单列

举例3:查询指定多列

多条件查询

whereIn查询

原生SQL

第一种:查询无需返回、插入、修改、删除等

第二种:无参数查询并接收

第三种:查询带参数并接收

根据条件查询获得数量

查询结果控制与过滤

举例1:查询结果按升序排列并仅返回第一条数据

举例2:条件查询检查是否存在

举例3:查询不重复记录-distinct

修改单/多列,原地运算

举例1:设置x字段为新值,新值规则:使用$和当前时间戳与原值拼接

举例2:将times字段+1,同时修改updated_at字段

举例3:修改descp、passwd这两列

删除

事务

插入、批量插入

初始化建表

附带:pg常用命令

修改列类型

修改列名称

添加列

删除列(如有需要)


查询指定列

举例1:根据主键直接查询


var user  UserInfo 
user.ID = 12
db.Model(&user).WherePK().Select()


举例2:查询指定单列

通过id查询name列

var name string
.Where("id = ?", id).Column("name").Select(&name)

举例3:查询指定多列

type AgeAndName struct {Age   intName string
}var records []AgeAndName
db.Model(&AgeAndName{}).Where("id =? ", ids).Column("age").Column("name").Select(&records)

多条件查询

var xx []Xxx
_, err = db.Model(xx).Where("s1 = ? and s2 = ?", 1, 2)

whereIn查询

db.Model(&Xxx{}).WhereIn("id in (?) and a=1", []int{1,2})

原生SQL

第一种:查询无需返回、插入、修改、删除等

_, err := conn.Exec("sql语句")

第二种:无参数查询并接收

	var users []User_, err := db.Query(&users, `SELECT * FROM users`)此处db是*pg.DB

第三种:查询带参数并接收

	var users []User_, err := db.Query(&users, `SELECT * FROM users WHERE id IN (?)`, pg.In(ids))此处db是*pg.DB

或者按需用QueryOne:

	var dst int_, err := db.QueryOne(pg.Scan(&dst), "SELECT 1")

查一个对象/一条记录:

    var user User_, err := db.QueryOne(&user, `SELECT * FROM users WHERE id = ?`, id)

根据条件查询获得数量

count, err = db.Model(&Xxx).Where("a = 1").Count()

查询结果控制与过滤


举例1:查询结果按升序排列并仅返回第一条数据

var xx Xxx
err = db.Model(xx).Order("created_time ASC").Where("a = 1 AND b = ? and c = ?",1,  2).First()

举例2:条件查询检查是否存在

isExists,err = db.Model(&Xxx{}).Where("a = 1 AND b = ? and c = ?",1,  2).Exists()
err为nil时,isExists=true表示存在,反之不存在。

举例3:查询不重复记录-distinct

var xx []Xxx
err = db.Model(&xx).DistinctOn("status").Where("a = 1 and b = ? ", 1).Select()

修改单/多列,原地运算

举例1:设置x字段为新值,新值规则:使用$和当前时间戳与原值拼接

    db.Model(&xxx{}).Where("id= ?", id).Set("x = x || '$' || ?", time.Now().UnixNano()).Update()

举例2:将times字段+1,同时修改updated_at字段

.Model(&xxx{}).Where("id = ?", id).Set("times = times + ?", 1).Set("updated_at = ?", time.Now()).Update()

举例3:修改descp、passwd这两列

db.Model(&UserInfo{}).Where("id= ?", id).Set("descp=?", descp).Set("passwd=?", passwd).Update()

删除

db.Model(info).WhereIn("id in (?)", ids).Delete()

事务

    tx, err = db.Begin()if err != nil {return}}err = tx.Model(&Xxx).Where("id =? ", id).Select()

插入、批量插入

插入:

task := Task{...}  // 待插入对象
db.Model(task).Insert()

批量插入:

task := []task{...}  // 待插入对象
db.Model(&task).Insert()

初始化建表

tables := []interface{}{&model.A{},&model.B{},&model.C{},}for i := range tables {err = alertDB.CreateTable(tables[i])if err != nil {return}}

附带:pg常用命令

修改列类型

alter table 表名 alter COLUMN 列名 type varchar(2048);

修改列名称

ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名;

添加列

alter table  表名 add  列名 varchar(16) default '';

删除列(如有需要)

alter table 表名  drop column if exists 列名;


http://www.ppmy.cn/news/1279122.html

相关文章

使用C语言将ASCII明文编码为GSM短信体格式

一、背景介绍 GSM(Global System for Mobile Communications)是全球移动通信系统的简称,而GSM 03.38是GSM系统中用于短信编码的标准。GSM 03.38字符集采用7-bit编码,与ASCII的8-bit编码有所不同。为了将ASCII编码的文本转换为GSM…

uniapp使用colorUI

colorUI 微动画 | ColorUI 使用文档 1&#xff1a;把colorui里三个文件复制到自己项目中去 App.vue </script> <style> import url(colorui/icon.css); import url(colorui/main.css); import url("colorui/animation.css");-webkit-keyframes show {…

Web前端-JavaScript(内置对象)

文章目录 1 内置对象1.1 概述1.2 Math对象1.3 Date对象1.4 Array对象数组判断添加删除数组排序数组转字符串数组索引方法清空数组其它方法 1.5 String对象字符串的不可变根据字符返回位置根据位置返回字符字符串操作方法替换方法分割方法 2 数据类型存储方式2.1 数据类型分类&a…

对数函数求导

方法 一般形 复合型 复杂复合型

使用OpenCV4实现工业缺陷检测的六种方法

目录 1 机器视觉2 缺陷检测3 工业上常见缺陷检测方法 1 机器视觉 机器视觉是使用各种工业相机&#xff0c;结合传感器跟电气信号实现替代传统人工&#xff0c;完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成&#xff0c;…

使用Swift Package Manager (SPM)实现xcframework分发

Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器&#xff0c;用于解决在开发过程中管理和构建包依赖项的需求。 1、上传xcframework.zip到服务端 压缩xcframeworks成一个zip包&…

开源 AI 新秀崛起:Bittensor 更像是真正的“OpenAI”

强大的人工智能正在飞速发展&#xff0c;而完全由 OpenAI、Midjourney、Google&#xff08;Bard&#xff09;这样的少数公司控制 AI 不免让人感到担忧。在这样的背景下&#xff0c;试图用创新性解决方案处理人工智能中心化问题、权力集中于少数公司的 Bittensor&#xff0c;可谓…

macOS 开发 - MASShortcut

文章目录 关于 MASShortcut项目结构 快速使用源码学习检测是否有热键冲突处理 Event macOS 开发交流 秋秋群&#xff1a;644096295&#xff0c;V : ez-code 关于 MASShortcut MASShortcut 是一款快捷键管理工具&#xff0c;替代和兼容 ShortcutRecorder github : https://git…