go-pg框架常用操作汇总

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

目录

查询指定列

举例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   int
    Name 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 列名;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值