Golang牵手PostgreSQL"增删改查+不写结构快速扫描字段"快速入门

网友投稿 652 2023-05-23

Golang牵手***"增删改查+不写结构快速扫描字段"快速入门

Golang牵手***"增删改查+不写结构快速扫描字段"快速入门

***(也称postgres)是一款强大的开源对象关系数据库系统(ORDBMS), 历经30年以上的打磨, 具有高可靠性, 强健壮性, 高性能等优点. 详见官网.

什么是不写结构体?

接下来, 咱们一起来实现*** Golang版本的增删改查(CRUD)与单行,多行字段快速扫描解析吧!

驱动安装

执行以下命令安装postgresql驱动

pq包支持的功能

SSL作为驱动程序, 与database/sql结合处理连接相关操作扫描时间time.Time类型, 如 timestamp[tz], time[tz], date扫描二进制blobs对象(Blob是内存中的数据缓冲, 用来匹配strign类型的ID和字节切片), 如: bytea***的hstore数据类型支持支持COPY FROMpq.ParseURL方法用来将urls转化为sql.Open的连接字符串支持许多libpq库兼容的环境变量支持Unix socket支持通知Notifications, 如:LISTEN/NOTIFY支持pgpassGSS (Kerberos) 认证

连接字符串参数

pq包与libpq类似(libpq是用C编写的底层接口, 为其他高级语言比如C++,Perl,Python,Tcl和ECPG等提供底层***支持). 建立连接时需要提供连接参数, 一部分支持libpq的参数也支持pq, 额外的, pq允许在连接字符串中指定运行时参数(如:search_path或work_mem), libpq则不能在连接字符串中指定运行时参数, 只能在option参数中指定.

pq包为了兼容libpq包, 下面的连接参数都支持

* dbname - 需要连接的数据库名 * user - 需要使用的用户名 * password - 该用户的密码 * host - 需要连接的postgresql主机, unix域名套接字以/开始, 默认是localhost * port - postgresql绑定的端口 (默认5432) * sslmode - 是否使用SSL (默认是启用(require), libpq包默认不启用SSL) * fallback_application_name - 失败时,可以提供一个应用程序名来跟踪. * connect_timeout - 连接最大等待秒数, 0或者不指定, 表示不确定时间的等待 * sslcert - 证书文件位置, 文件中必须包含PEM编码的数据 * sslkey - 密钥文件位置, 文件中必须包含PEM编码的数据 * sslrootcert - 根证书文件位置, 文件中必须包含PEM编码的数据

sslmode 支持一下模式

* disable - 禁用SSL * require - 总是使用SSL(跳过验证) * verify-ca - 总是使用SSL (验证服务器提供的证书是由可信的CA签署的) * verify-full - 总是使用SSL(验证服务器提供的证书是由受信任的CA签署的,并验证服务器主机名是否与证书中的主机名匹配)

更多连接字符串参数请参考官方文档

对包含空格的参数, 需要使用单引号, 如:

"user=pqgotest password='with spaces'"

使用反斜杠进行转义, 如:

"user=space\ man password='it\'s valid'"

注意: 如果要设置client_encoding连接参数(用于设置连接的编码), 必须设置为"UTF8", 才能与Postgres匹配, 设置为其他值将会报错.

除了上面的参数, 在连接字符串中也可以通过后台设置运行时参数, 详细运行时参数, 请参考runtime-config

支持libpq的大部分环境变量也支持pq包, 详细环境变量请参考libpq-envars. 如果没有设置环境变量且连接字符串也没有提供该参数, 程序会panic崩溃退出, 字符串参数优先级高于环境变量.

完整"增删改查"示例代码

执行 go run main.go运行结果如下:

Successfully created connection to database Finished dropping table (if existed) Finished creating table Inserted 3 rows of data Data row = (1, banana, 150) Data row = (2, orange, 154) Data row = (3, apple, 100) 2020/12/15 22:13:33 返回多元素数组: [{"id":"1","name":"banana","quantity":"150"},{"id":"2","name":"orange","quantity":"154"},{"id":"3","name":"apple","quantity":"100"}] 2020/12/15 22:13:33 返回单行数据Map: {"DateStyle":"ISO, MDY"} Updated 1 row of data Data row = (2, orange, 154) Data row = (3, apple, 100) Data row = (1, banana, 200) Deleted 1 row of data Data row = (3, apple, 100) Data row = (1, banana, 200) Finished dropping table (if existed)

总结

本文对pq驱动包以及连接字符串参数进行了介绍

示例代码分别将连接/创建表格/增加行数据/更新行数据/删除行数据封装为不同的方法, 便于灵活使用

查询单行或多行数据时, 可以直接使用封装好的方法, 直接传入Db指针和查询语句即可

参考文档

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:推荐一款神仙颜值的 Redis 客户端工具,开源啦
下一篇:SQL:我为什么慢你心里没数吗?
相关文章