首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

百亿数据百亿花,库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12

Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复的SQL语句,ORM上手简单,通用性较高,但是在性能层面略有损耗,Gorm的底层是结构体对象,关于结构体,请移玉步至:你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06[1]。

Gorm的安装与配置

首先如果要使用Gorm操作数据库,得先有数据库才行,这里为了全平台统一标准,我们使用Docker来安装Mysql数据库,Docker的安装请参见:一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群[2],运行命令运行mysql容器:

注意这里如果宿主机已经有Mysql服务了,需要将:左边的端口号错开,改成3307或者其他什么端口。

随后在终端运行命令安装Gorm包:

这里-u参数的意思是使用较新的版本

随后安装Mysql数据库链接驱动包:

接着在任意位置编写test.go脚本:

这里导入输出包和Gorm包,同时通过下划线的形式导入mysql驱动包,这样做的好处是mysql驱动的init()函数会在被导入时执行,因为我们并不需要驱动包的具体模块或者函数,而仅仅是用它连一下数据库而已。

随后,创建结构体变量db,注意Open函数对应的Mysql参数是否正确。

注意,结构体变量赋值过程中如果报错,需要判断err变量内容,并且使用return关键字提前结束逻辑,关于golang的错误处理,可参见:人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11[3]

最后,使用defer关键字在所有逻辑执行后关闭Mysql数据库链接。

编译执行后,程序返回:

当然Gorm并不仅仅只能操作Mysql,其他主流数据库也都支持,比方说Sqllite3,事实上,在成本有限或者缓存体系比较完备的情况下,Sqllite3完全可以替代Mysql,首先安装sqllite3驱动:

然后修改test.go文件:

编译执行后返回:

数据库操作

连接好数据库之后,我们就可以做一些数据库层面的操作了,比如程序层面的数据库迁移操作:

这里建立文章表的结构体数据,随后编写迁移逻辑:

进入Mysql命令行,输入命令:

没有问题。

创建数据:

这里我们声明两个结构体变量,然后将其指针传递给db变量的Create函数,编译运行后,键入命令进行查询操作:

随后,将刚才入库的数据查询出来:

这里通过new关键字初始化结构体,然后使用First函数获取第一条记录。

程序返回:

查出来的结构体指针可以直接用来做修改操作:

程序返回:

非常方便。

最后,是删除操作:

这里通过指针传入Delete函数即可:

该条记录已经被物理删除。

执行原生SQL

如果我们需要执行原生的sql语句,Gorm也提供了对应的函数:

这里只需要声明文章的结构体变量,然后执行Scan函数即可:

这里会返回一个切片嵌套结构体的结果集。

除此之外,更新和删除操作:

程序返回:

结语

目前Golang的比较流行的ORM包除了Gorm,还有Xorm,对比Python数据库ORM的百花齐放,百家争鸣,Go lang还有很长的一段路需要走,真实环境下的数据库操作也不仅仅是增删改查,更多操作请移步Gorm官方文档:https://gorm.io/zh\_CN/docs/

引用链接

你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06:https://v3u.cn/a_id_229

一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群:https://v3u.cn/a_id_185

人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11:https://v3u.cn/a_id_235

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221225A015PP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券