增删改查一应俱全;如果有没列出来的,请留言作者补上。
收藏备忘,快速查阅!
目录
查询指定列
举例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 列名;