Go语言sqlx库操作PostgreSQL数据库增删改查
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数据库增删改查相关推荐
- windows vs2022 c/c++连接操作postgresql数据库 - 增删改查
关于环境的配置请参考上一篇文章,本文仅包含示例代码 namespace idealand {typedef int (*PGResultHandler)(PGresult*);class DB{pub ...
- jdbc链接mysql按照id查询_使用jdbc连接并操作Oracle数据库(增删改查IDUS)
使用jdbc连接并操作Oracle数据库(增删改查IDUS) [oracle@zaibei-db ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Pro ...
- Golang原生sql操作Mysql数据库增删改查
Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...
- VS2022,C#中对PostgreSQL数据库增删改查实例记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.c#在VS中连接PostgreSQL数据库 二.使用步骤 1.引入库 2.设置连接 3.然后新建一个类文件,开始写 ...
- Python FastAPI 框架 操作Mysql数据库 增删改查
2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...
- python对sqlite增删改查_Python操作sqlite3数据库 增删改查
SQLite,是一款轻型的数据库,占用资源非常的低.这里记录下对sqlite3的增删改查相关操作,顺便复习一下SQL语句- -. 一.创建数据库 连接到一个现有的数据库.如果数据库不存在,那么它就会被 ...
- PostgreSql数据库增删改查以及其他基本命令
先来安装一波,我在docker上安装的 #先运行docker,我使用的是自定义的centos+vim镜像 docker run -itd --name pgsql centos-vim /usr/sb ...
- uniCloud云函数操作云数据库增删改查
uniCloud操作云数据库 1.获取集合的引用 const db = uniCloud.database() // 获取"users"集合的引用 const users = db ...
- js修改mysql数据库数据_Node.js操作mysql数据库增删改查
关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...
最新文章
- R程序设计中的IF、IFELSE、SWITCH
- android开发字体样式,Android开发中修改程序字体的样式
- mysql存储数据,varchar类型中的数据变成了科学计数法?
- Web前后端笔记-通过对称加密算法和信息摘要算法防止数据重放
- EXT学习经验分享:深刻理解EXT与服务器端的交互
- java+ext.ajax,[转载]Ext Ajax:怎么调用Ext.Ajax.request方法和使用Java Servlet进行处理
- rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了
- js控制分页打印、打印分页示例
- Android 6.0 动态权限申请注意事项
- 【ZZULIOJ】1047: 对数表
- 勾股定理算斜边用计算机怎么按,三角形斜边(直角三角形斜边计算器)
- js实现微信表情发送
- 考试,一种严格的水平鉴定方法。
- bat和cmd文件是什么,dos又是什么东西
- python爬取歌曲_python爬取网易云音乐热歌榜实例代码
- 【C语言】运算符的优先级
- Python列表简介
- 杜克大学计算机专业,杜克大学计算机专业怎么样?过来人告诉你
- iOS 截屏的总结,AVplayer的截屏,当前屏幕的截屏,截屏后导航栏不见的情况
- 基于vue的图片裁剪插件vue-cropper
热门文章
- HX=JE,HX-JE芯片,无感升压ic电荷泵led驱动,FS2115C 5V无感升压芯片
- 在橙黄色网站设计中寻找灵感
- 如何恢复删除的数据(以损坏的U盘为例)
- 线结构光光条直线方程提取问题分析
- 泛目录程序-泛目录站群程序-免费泛目录站群管理工具下载
- Git 回滚Rollback
- 入门c语言(四)顺序结构程序设计
- Python安装超详细教程
- STM32H750(或743)核心电源Vcore使用外部开关电源SMPS
- sql 排名前十_“一流大学”最新排名:浙大第三,复旦无缘前十,榜首无人撼动...