go 操作数据库
Posted esiarp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 操作数据库相关的知识,希望对你有一定的参考价值。
假设有了数据库,创建表
CREATE TABLE `userinfo` ( `uid` INT(10) NOT NULL AUTO_INCREMENT, //自增字段 `username` VARCHAR(64) NULL DEFAULT NULL, //默认值 `department` VARCHAR(64) NULL DEFAULT NULL, `created` DATE NULL DEFAULT NULL, PRIMARY KEY (`uid`) //主键 ); CREATE TABLE `userdetail` ( `uid` INT(10) NOT NULL DEFAULT ‘0‘, `intro` TEXT NULL, `profile` TEXT NULL, PRIMARY KEY (`uid`) )
go中操作数据库与python不一样,go没有提供数据库驱动,但提供了接口,我们可以根据接口开发驱动,或是使用第三方库
先来看mysql数据库的
package main import ( "database/sql" "fmt" //"time" _ "github.com/go-sql-driver/mysql" //第三方库,前面加了下划线运行Init函数配置接口. ) func main() { db, err := sql.Open("mysql", "admin:[email protected](127.0.0.1:3306)/haha?charset=utf8") //open函数用来打开一个注册过的数据库驱动.格式:user:[email protected](localhost:5555)/dbname?charest=utf8 checkErr(err) //插入数据 stmt, err := db.Prepare("INSERT userinfo SET username=?,department=?,created=?") //准备sql要执行的操作,然后返回准备完毕的状态 checkErr(err) res, err := stmt.Exec("a", "研发部门", "2018-1-09")//执行准备好的sql语句 checkErr(err) id, err := res.LastInsertId()//自增ID checkErr(err) fmt.Println(id) //更新数据 stmt, err = db.Prepare("update userinfo set username=? where uid=?") checkErr(err) res, err = stmt.Exec("astaxieupdate", id) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println(affect) //查询数据 rows, err := db.Query("SELECT * FROM userinfo") //执行返回结果 checkErr(err) for rows.Next() { var uid int var username string var department string var created string err = rows.Scan(&uid, &username, &department, &created) checkErr(err) fmt.Println(uid) fmt.Println(username) fmt.Println(department) fmt.Println(created) } //删除数据 stmt, err = db.Prepare("delete from userinfo where uid=?") checkErr(err) res, err = stmt.Exec(id) checkErr(err) affect, err = res.RowsAffected() checkErr(err) fmt.Println(affect) db.Close() } func checkErr(err error) { if err != nil { panic(err) } }
//https://github.com/mattn/go-sqlite3驱动 func init() { //以上数据库都是以sql.Register注册的 sql.Register("sqlite3", &SQLiteDriver{}) } //https://github.com/mikespook/mymysql驱动 // Driver automatically registered in database/sql var d = Driver{proto: "tcp", raddr: "127.0.0.1:3306"} func init() { Register("SET NAMES utf8") sql.Register("mymysql", &d) }
sqlite3操作与上面代码基本一致.也需要引入第三方库,在MYSQL中使用?号传递数据,而PostgreSQL是通过$1
,$2
这种方式来指定要传递的参数
以上是关于go 操作数据库的主要内容,如果未能解决你的问题,请参考以下文章
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段
npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段