golang之数据库操作
1.导入必要的包
import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动
)
2.相关操作
连接数据库
使用sql.Open()函数进行数据库的连接
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
//用户名:密码@tcp(127.0.0.1:3306)/你要连接的数据库if err != nil {panic(err)}defer db.Close()
//使用完毕后不要忘了关闭
package mainimport("database/sql"_ "github.com/go-sql-driver/mysql""fmt"
)func main(){db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/mydb")//db是 *sql.DB 使用Open函数打开目标的IP的指定数据库if err !=nil {fmt.Println("open error")return }fmt.Printf("type is %T\n",db)err = db.Ping()//Ping一下 看是否真的连接成功
if err != nil {panic(err)
}
fmt.Println("Connected to database!")defer db.Close()
}
运行可能出现如下错误:说明数据库拒绝访问,需要使用mysql_native_password插件。
解决上面问题执行如下SQL语句:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY yourpass;
//上面输入你的密码
FLUSH PRIVILEGES;
SQL查询
先执行如下SQL语句创建表和填入方法
create table user ( uid int primary key auto_increment,name varchar(20) default '',
phone varchar(20) default '') engine=innodb;insert into user(name,phone) values('a','111'),('b','222'),('c','333');
1).使用QueryRow()方法进行单行查询
func (db* DB) QueryRow(query string,args ...interface{}) *Row
此方法执行一次 最多只能返回一行数据 并且直到返回值的Scan()方法被调用后才会返回
被延迟的错误,不推荐使用
package main
import("database/sql"_ "github.com/go-sql-driver/mysql""fmt"
)type User struct {Uid intName stringPhone string
}func main(){db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/mydb")if err !=nil {fmt.Println("open error")return }fmt.Printf("type is %T\n",db)err = db.Ping()
if err != nil {panic(err)
}
fmt.Println("Connected to database!")defer db.Close()user1 :=User{}
err =db.QueryRow("select uid,name,phone from user where uid=2").Scan(&user1.Uid,&user1.Name,&user1.Phone)if err !=nil {fmt.Println("sql Query error")return}fmt.Println(user1.Uid," ",user1.Name," ",user1.Phone)
}

2)Query()查询多行结果
user1 :=User{}
rows ,err :=db.Query("select uid,name,phone from user")//返回error和 *rowsif err !=nil {fmt.Println("sql Query error")return}defer rows.Close()//关闭ROWS 释放所有的数据库连接//循环读取结果集中的数据 储存在结构体中for rows.Next(){err =rows.Scan(&user1.Uid,&user1.Name,&user1.Phone)if err !=nil {fmt.Println("Scan error")return}fmt.Println(user1.Uid," ",user1.Name," ",user1.Phone)}

3). db.Exec(sql string) (Result,error)可以进行表数据的增删改 .
result,err :=db.Exec("insert into user(name,phone) values('d','444')")//SQL中的字符串类型用单引号 函数执行返回(result,error)类型
if err !=nil {fmt.Println("insert error")return
}lastInsertID, err := result.LastInsertId()//获得插入数据的主键部分if err !=nil {fmt.Println("get ID error")return}fmt.Println("insert success, the id is ",lastInsertID)//剩下的删和该是一样的
4)事务操作
begin()方法开启事务:func (db *DB) Begin() (*Tx,error)
Commint()提交事务: func (tx *Tx) commit () error
Rollback()回滚事务: func (tx *Tx) Rollback() error
package main
import("database/sql"_ "github.com/go-sql-driver/mysql""fmt"
)type User struct {Uid intName stringPhone string
}func main(){db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/mydb")if err !=nil {return }err = db.Ping()
if err != nil {panic(err)
}fmt.Println("Connected to database!")defer db.Close()tx, err :=db.Begin() //开启事务if err!=nil {if tx!=nil {tx.Rollback()}fmt.Println("begin trans failed")return }_,err1 :=tx.Exec("update user set name = 'ggg' where phone = '444'")if err1 !=nil {tx.Rollback()//执行失败 进行回滚事务fmt.Println("sal update failed")return}tx.Commit()//提交事务fmt.Println("exec transaction success!")
}

相关文章:
golang之数据库操作
1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…...
对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…...
Mac 删除ABC 输入法
参考链接:百度安全验证 Mac下删除系统自带输入法ABC,正解!_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态,可以删除 ;可能会对DNS 输入有影响,但是可以通过复…...
《机器学习》之K-means聚类
目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…...
日常工作之 Elasticsearch 常用查询语句汇总
日常工作之 Elasticsearch 常用查询语句汇总 查询现有索引创建索引查询索引结构插入数据查询索引数据查看索引磁盘占用信息删除索引查看分词器分词结果指定查询数量指定条件查询数据迁移统计索引数据量更新数据 在使用 es 的过程中,总是会用到 es 的查询语句&#x…...
WeakAuras NES Script(lua)
WeakAuras NES Script 修星脚本字符串 脚本1:NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…...
JVM 触发类加载的条件有哪些?
目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时,先初始化父类 2.5、虚拟机启动时,初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…...
Android实战经验篇-增加系统分区
系列文章转如下链接: Android Display Graphics系列文章-汇总 Android实战经验篇-系列文章汇总 本文主要包括部分: 一、Android分区说明 1.1 系统分区查看 1.2 分区表修改 1.3 验证新分区 二、源码修改 2.1 generate_extra_images 2.2 fstab 2…...
深入学习 Python 量化编程
深入学习 Python 量化编程 第一章:Python 基础与量化编程环境搭建 1.1 安装必要的库 首先,你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库: pip install numpy pandas matplotlib yfinance backtrader scikit-…...
机器学习笔记——特征工程
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 特征工程(Fzeature Engineering)1. 特征提取ÿ…...
4种革新性AI Agent工作流设计模式全解析
文章目录 导读:AI Agent的四种关键设计模式如下:1. 反思2. 工具使用3. 规划4. 多Agent协作 总结内容简介: 导读: AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不仅接收任务,还自主制定和执行…...
【入门级】计算机网络学习
网络安全:前端开发者必知:Web安全威胁——XSS与CSRF攻击及其防范-CSDN博客 三次握手四次挥手:前端网络—三次握手四次挥手_前端三次握手-CSDN博客 http协议和https协议的区别:前端网络—http协议和https协议的区别-CSDN博客 网…...
安装 Jenkins 后无法访问用户名或密码且忘记这些凭证怎么办?
Jenkins 是一款功能强大的自动化服务器,在持续集成与交付(CI/CD)领域应用广泛。不过,用户在使用过程中,尤其是首次接触该系统或系统重启后,常常会遇到登录方面的问题。要是 Jenkins 突然要求输入用户名和密…...
day08_Kafka
文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列(了解)**为什么消息队列就像是“数据的快递员”?****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…...
安装conda 环境
conda create -n my_unet5 python3.8 (必须设置3.8版本) conda activate my_unet5...
【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间
🌀 一个中大型ROS项目常需要各个人员分别完成特定的功能,而后再组合部署,而各人员完成的功能常常依赖于一定的环境,而我们很难确保这些环境之间不会相互冲突,特别是涉及深度学习环境时。这就给团队项目的部署落地带来了…...
使用外网访问在群晖中搭建思源docker
还是要折腾,之前发现用公网IP可以访问就没有折腾,今天ip变了,用不了了,一搜,发现有方法可以用域名访问,哎,太好了! 原文:分享我在 群晖 docker 部署 思源笔记 步骤 - 链…...
深度学习中的EMA技术:原理、实现与实验分析
深度学习中的EMA技术:原理、实现与实验分析 1. 引言 指数移动平均(Exponential Moving Average, EMA)是深度学习中一种重要的模型参数平滑技术。本文将通过理论分析和实验结果,深入探讨EMA的实现和效果。 深度学习中的EMA技术:原理、实现与…...
win32汇编环境,窗口程序中对按钮控件常用操作的示例
;运行效果 ;win32汇编环境,窗口程序中对按钮控件常用操作的示例 ;常用的操作,例如创建按钮控件,使其无效,改变文本,得到文本等。 ;将代码复制进radasm软件里,直接就可以编译运行。重点部分加备注。 ;>&g…...
CentOS 7.9 通过 yum 安装 Docker
文章目录 前言一、删除已安装的 Docker二、网络设置三、设置 yum 源,并安装依赖四、设置 Docker 仓库五、安装及使用 Docker六、镜像仓库总结 前言 CentOS 7.9 过了维护期,Docker 官方文档没有了相关的安装文档。记录一下,备用! …...
Xinference下载模型卡住不动?从0%到100%的完整排坑指南
写在前面最近在使用Xinference部署模型时,遇到了一个让人抓狂的问题:无论WebUI还是命令行,模型下载的进度始终卡在0%不动,多次重试后还是没变化。更诡异的是,服务日志显示一切正常,但是就是下载不了。经过一…...
全球人形机器人革命浪潮涌动,特斯拉/微美全息聚焦AI具身量产应用新突破!
近日,特斯拉(TSLA.US)马斯克宣布开启人类历史上规模最大的芯片制造项目——TERAFAB,目标实现每年超过1太瓦的算力产出。该设施将整合芯片设计、光刻、制造等全流程,其生产的部分芯片未来将直接用于驱动特斯拉电动车以及人形机器人。人形机器人…...
3步实现飞书文档高效转换:Cloud Document Converter全场景解决方案
3步实现飞书文档高效转换:Cloud Document Converter全场景解决方案 【免费下载链接】cloud-document-converter Convert Lark Doc to Markdown 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-document-converter 一、三大痛点:飞书文档管理…...
交通运输部关于印发《交通运输综合应急预案》等5项突发事件应急预案的通知
交通运输部于 2026 年印发的《交通运输综合应急预案》等五项突发事件应急预案,构建起总领统筹、分领域专项、全链条衔接的交通运输应急管理体系,分别从综合协同、公路设施、水路运行、道路运输、工程建设五个维度,明确了突发事件预防、预警、…...
【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---执行层
基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...
Dress Code:突破性高分辨率虚拟试衣数据集的技术架构与实战应用
Dress Code:突破性高分辨率虚拟试衣数据集的技术架构与实战应用 【免费下载链接】dress-code 项目地址: https://gitcode.com/gh_mirrors/dre/dress-code Dress Code是由意大利摩德纳大学研究团队开发的高分辨率多类别虚拟试衣数据集,为计算机视…...
GPS定位误差从几十米到厘米级:RTK技术如何实现高精度定位(附手机实测对比)
GPS定位误差从几十米到厘米级:RTK技术如何实现高精度定位(附手机实测对比) 你是否曾在城市峡谷中看着导航地图上飘忽不定的定位箭头哭笑不得?或是户外徒步时发现轨迹记录偏离实际路线数十米?这些困扰背后,是…...
11. 免费GPU资源汇总(三):腾讯云、百度智能云免费算力实操
调试卡在CUDA out of memory?聊聊免费GPU算力的门道 昨天帮同事调试一个目标检测模型,明明batch_size已经调到4了,还是爆显存。实验室的2080Ti卡被其他项目占着,自己笔记本的3060跑不动。这种时候才真切感受到——独立GPU资源对开发者来说,有时候比代码能力还关键。 免费…...
字幕提取与格式转换解决B站内容离线使用难题:BiliBiliCCSubtitle的多场景应用指南
字幕提取与格式转换解决B站内容离线使用难题:BiliBiliCCSubtitle的多场景应用指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 当你在B站发现一门优…...
如何参与Splide开源轮播组件:完整社区贡献指南
如何参与Splide开源轮播组件:完整社区贡献指南 【免费下载链接】splide Splide is a lightweight, flexible and accessible slider/carousel written in TypeScript. No dependencies, no Lighthouse errors. 项目地址: https://gitcode.com/gh_mirrors/sp/splid…...
