0. 引用

sqlx地址:https://github.com/jmoiron/sqlx
PostgreSQL官网:https://www.postgresql.org/

1. PostgreSQL安装、运行

可以到官网下载二进制包 https://www.postgresql.org/download/
也可以用apt、源代码或者WAPP、LAPP等方式安装

由于docker更方便,直接用docker安装运行
创建数据存放的目录

mkdir /data
mkdir /data/postgres

运行PostgreSQL

docker run -it --name postgres --restart always -e POSTGRES_PASSWORD='admin123' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /data/postgres:/var/lib/postgresql -p 54321:5432 -d postgres
  • -e POSTGRES_PASSWORD='abc123' 设置密码为admin123
  • -e ALLOW_IP_RANGE=0.0.0.0/0 所有ip可以连接
  • -v /data/postgres:/var/lib/postgresql 数据存在本地/data/postgres
  • -p 54321:5432 指定端口为54321

PgAdmin4连接测试

2. Go连接数据库

最主要是设置dsn, host设置为数据库ip或域名,port为端口默认5432,我这里用54321,user是postgres ,password是刚才设置的admin123 ,dbname根据需求设置

package mainimport ("fmt""github.com/jmoiron/sqlx"_ "github.com/lib/pq"
)var db *sqlx.DBfunc initDB() (err error) {dsn := "host=X.X.X.X port=54321 user=postgres password=admin123 dbname=postgres sslmode=disable"db, err := sqlx.Connect("postgres", dsn)if err != nil {fmt.Printf("connect DB failed, err:%v\n", err)return}db.SetMaxOpenConns(50)db.SetMaxIdleConns(5)return
}func main() {err := initDB()if err != nil {return}fmt.Println("DB Connected...")
}

3. 建立测试用的库和表

新建一个数据库test用于测试

CREATE DATABASE "test"
WITHENCODING = 'UTF8'
;

再建一个表user_info

CREATE TABLE "public"."user_info" ("id" serial4,"uid" int8 NOT NULL,"name" varchar(255) NOT NULL,"group" varchar(255) NOT NULL,"balance" decimal(8,2) NOT NULL,"proportion" float8 NOT NULL,"create_time" timestamp NOT NULL,"comments" varchar(255),PRIMARY KEY ("id")
);CREATE INDEX "indexs" ON "public"."user_info" USING btree ("name","group"
);CREATE UNIQUE INDEX "uniques" ON "public"."user_info" USING btree ("uid"
);

4. 增删改

增删改用sqlx的exec

增 Insert

插入数据 要注意MySQL占位符用的? ,? ,? 而PG用的$1 ,$2 ,$3

func testInsert() {sqli := `INSERT INTO "public"."user_info" ("uid", "name", "group", "balance", "proportion", "create_time", "comments") VALUES ($1, $2, $3, $4, $5, $6, $7);`_, err := db.Exec(sqli, 100, "名字", "组", 2.33, 27.148, "2022-05-08 18:11:22", nil)if err != nil {fmt.Printf("insert failed, err:%v\n", err)return}fmt.Printf("insert success\n")
}

删 Delete

删除id为6的行

func testDelete() {sqld := `DELETE FROM "public"."user_info" WHERE "id" = $1`ret, err := db.Exec(sqld, 6)if err != nil {fmt.Printf("delete failed, err:%v\n", err)return}n, err := ret.RowsAffected() // 操作影响的行数if err != nil {fmt.Printf("get RowsAffected failed, err:%v\n", err)return}fmt.Printf("delete success, affected rows:%d\n", n)
}

改 Update

把uid为100的name改为张三

func testUpdate() {sqlu := `UPDATE "public"."user_info" SET "name" = $1 WHERE "uid" = $2`ret, err := db.Exec(sqlu, "张三", 100)if err != nil {fmt.Printf("update failed, err:%v\n", err)return}n, err := ret.RowsAffected() // 操作影响的行数if err != nil {fmt.Printf("get RowsAffected failed, err:%v\n", err)return}fmt.Printf("update success, affected rows:%d\n", n)
}

5. 查

查询前先写一个结构体,查到后直接绑定

type UserInfoType struct {Id         int            `db:"id"`Uid        int64          `db:"uid"`Name       string         `db:"name"`Group      string         `db:"group"`Balance    float64        `db:"balance"`Proportion float64        `db:"proportion"`CreateTime time.Time      `db:"create_time"`Comments   sql.NullString `db:"comments"`
}

5.1 查询单行数据

func testSelectOne() {sqls := `SELECT * FROM "public"."user_info"  WHERE "uid" = $1`var user UserInfoTypeerr := db.Get(&user, sqls, 100)if err != nil {fmt.Printf("get failed, err:%v\n", err)return}fmt.Printf("one user: %#v\n", user)
}

5.2 查询多行数据

func testSelectAll() {sqls := `SELECT * FROM "public"."user_info" WHERE "uid" > $1`var users []UserInfoTypeerr := db.Select(&users, sqls, 0)if err != nil {fmt.Printf("query failed, err:%v\n", err)return}fmt.Printf("all users: %#v\n", users)
}

5.3 In查询

查询uid为 集合(2,3)的行

func testSelectIn() {uids := []int{2, 3}sqlin := `SELECT * FROM "public"."user_info" WHERE "uid" in(?)`query, args, err := sqlx.In(sqlin, uids)if err != nil {fmt.Printf("sqlin failed, err:%v\n", err)return}query = db.Rebind(query)fmt.Println(query)var users []UserInfoTypeerr = db.Select(&users, query, args...)if err != nil {fmt.Printf("query failed, err:%v\n", err)return}fmt.Printf("all user: %#v\n", users)
}

Go语言sqlx库操作PostgreSQL数据库增删改查相关推荐

  1. windows vs2022 c/c++连接操作postgresql数据库 - 增删改查

    关于环境的配置请参考上一篇文章,本文仅包含示例代码 namespace idealand {typedef int (*PGResultHandler)(PGresult*);class DB{pub ...

  2. jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)

    使用jdbc连接并操作Oracle数据库(增删改查IDUS) [oracle@zaibei-db ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Pro ...

  3. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  4. VS2022,C#中对PostgreSQL数据库增删改查实例记录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.c#在VS中连接PostgreSQL数据库 二.使用步骤 1.引入库 2.设置连接 3.然后新建一个类文件,开始写 ...

  5. Python FastAPI 框架 操作Mysql数据库 增删改查

    2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...

  6. python对sqlite增删改查_Python操作sqlite3数据库 增删改查

    SQLite,是一款轻型的数据库,占用资源非常的低.这里记录下对sqlite3的增删改查相关操作,顺便复习一下SQL语句- -. 一.创建数据库 连接到一个现有的数据库.如果数据库不存在,那么它就会被 ...

  7. PostgreSql数据库增删改查以及其他基本命令

    先来安装一波,我在docker上安装的 #先运行docker,我使用的是自定义的centos+vim镜像 docker run -itd --name pgsql centos-vim /usr/sb ...

  8. uniCloud云函数操作云数据库增删改查

    uniCloud操作云数据库 1.获取集合的引用 const db = uniCloud.database() // 获取"users"集合的引用 const users = db ...

  9. js修改mysql数据库数据_Node.js操作mysql数据库增删改查

    关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...

最新文章

  1. R程序设计中的IF、IFELSE、SWITCH
  2. android开发字体样式,Android开发中修改程序字体的样式
  3. mysql存储数据,varchar类型中的数据变成了科学计数法?
  4. Web前后端笔记-通过对称加密算法和信息摘要算法防止数据重放
  5. EXT学习经验分享:深刻理解EXT与服务器端的交互
  6. java+ext.ajax,[转载]Ext Ajax:怎么调用Ext.Ajax.request方法和使用Java Servlet进行处理
  7. rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了
  8. js控制分页打印、打印分页示例
  9. Android 6.0 动态权限申请注意事项
  10. 【ZZULIOJ】1047: 对数表
  11. 勾股定理算斜边用计算机怎么按,三角形斜边(直角三角形斜边计算器)
  12. js实现微信表情发送
  13. 考试,一种严格的水平鉴定方法。
  14. bat和cmd文件是什么,dos又是什么东西
  15. python爬取歌曲_python爬取网易云音乐热歌榜实例代码
  16. 【C语言】运算符的优先级
  17. Python列表简介
  18. 杜克大学计算机专业,杜克大学计算机专业怎么样?过来人告诉你
  19. iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
  20. 基于vue的图片裁剪插件vue-cropper

热门文章

  1. HX=JE,HX-JE芯片,无感升压ic电荷泵led驱动,FS2115C 5V无感升压芯片
  2. 在橙黄色网站设计中寻找灵感
  3. 如何恢复删除的数据(以损坏的U盘为例)
  4. 线结构光光条直线方程提取问题分析
  5. 泛目录程序-泛目录站群程序-免费泛目录站群管理工具下载
  6. Git 回滚Rollback
  7. 入门c语言(四)顺序结构程序设计
  8. Python安装超详细教程
  9. STM32H750(或743)核心电源Vcore使用外部开关电源SMPS
  10. sql 排名前十_“一流大学”最新排名:浙大第三,复旦无缘前十,榜首无人撼动...