Golang 常用的数据库连接及操作

本文介绍了Golang如何操作常用数据库,包括通过database/sql库与数据库驱动交互,如MySQL的驱动安装和初始化,Redis的使用,以及PostgreSQL和MongoDB的驱动安装和操作。对于关系型和非关系型数据库,操作方式有所不同,特别是Redis和MongoDB这两种非关系型数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Golang 操作常用数据库
  • Golang 中对数据库的操作主要通过database/sql库来实现,但实际对数据库的操作并不是该库实现的而是由实现了其接口的对应数据库驱动做的
    因此需要引入对应的驱动并调用初始化方法
  • 常用的几种数据库连接操作:
    • mysql:
      • mysql 驱动安装go get github.com/go-sql-driver/mysql
      • import 时调用初始化方法 _ “github.com/go-sql-driver/mysql”
//增:

func TestMysqlInsert(){
  	DB, err1 := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)
  	defer DB.Close()
  	//sql.Open()接收驱动名称和一个包含连接目标的字符串,返回对应的连接对象
  	check(err1)
  	dbw, err2 := DB.Prepare("insert into Account(username,userid,passwd,email) values(?,?,?,?)")
  	//Prepare()接收带有占位符?的sql语句,相同格式的查询只需要一次Prepare调用,能够避免SQL字符串拼接的SQL注入问题
  	check(err2)
  	dbr, err3 := dbw.Exec("ligs", "162721", "wasu", "ligs@163.com")//对应占位符
   //也可以直接使用DB.Exec()直接传入sql语句来执行
   //DB.Exec("insert into Account(username,userid,passwd,email) values ( "hades", "162721", "2333", "3211@qq.com"))
  	check(err3)
  	row, err4 := dbr.RowsAffected()//返回操作影响的记录数
  	check(err4)
  	log.Println(row)
  
  }
  
//添加表 
func TestMysqlTableAdd() {
  	db, err := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)
  	defer db.Close()
  	check(err)
  	res, err2 := db.Exec("create table if not exists Student(name varchar(20),sex char(4),age int,id varchar(15),primary key(id))")
  	check(err2)
  	rs, errors := res.RowsAffected()
  	check(errors)
  	log.Printf("%v rows were influenced", rs)
  }
//查
func TestMysqlQuery() {
  	db, err := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)
  	check(err)
  	rows, _ := db.Query("select * from Account")
  	defer db.Close()
  	for rows.Next() {//Next()返回下一个记录是否存在
  		var username string
  		var userid string
  		var passwd string
  		var email string
  		rows.Scan(&username, &userid, &passwd, &email)//Scan()方法将一条记录写入传递的参数中
  		log.Println(username, userid, passwd, email)
  	}
  }
  //改
func TestMysqlModify() {
  	db, erro := sql.Open("mysql", user:passwd@tcp(host:port)/DataBaseName)
  	if erro != nil {
  		log.Println(erro)
  	}
  	dbw, erro2 := db.Prepare("update  Account set username=? where userid=?")
  	if erro2 != nil {
  		log.Println(erro2)
  	}
  	dbexec, erro3 := dbw.Exec("hades", "162721")
  	checErro(erro3)
  	rf, erro4 := dbexec.RowsAffected()
  	checErro(erro4)
  	log.Println(rf)
  
  }
//删除同理
  • Redis
    • 安装驱动
go get github.com/go-redis/redis

*Redis使用

func TestRedis() {
	cli := redis.NewClient(&redis.Options{
		Addr:     "",
		Password: "",
		DB:       0,
	})//初始化连接
	errors := cli.Set("ligs", "dadada", 0).Err()
	checErro(errors)
	log.Println(cli.Get("ligs"))
	log.Println(cli.Dump("Gopher"))
	log.Println(cli.Exists("ligs"))
	cli.Expire("Gopher",50)
	cli.Keys("*")
	//redis操作命令对应封装了同名函数,redis的操作可以说是是最简单的了,连接了以后对应的命令都有同名函数
}
  • Postgresql
    • 驱动安装go get github.com/lib/pq
    • 使用:
func TestPostgresql() {
  db, erro := sql.Open("postgres", "host= port= user= password= dbname= sslmode=disable")//建立连接
  checkErro(erro)
  rows, erro2 := db.Query("select * from account")
  checkErro(erro2)
  for rows.Next() {
    var userid int
    var username, password, email, timer string
    rows.Scan(&userid, &username, &password, &email, &timer)
    log.Printf("%v |%v |%v |%v |%v |\n", userid, username, password, email, timer)
  }

}//关系型数据库的操作类似
  • Mongodb:
    • 驱动:gopkg.in/mgo.v2,直接git clone https://gopkg.in/mgo.v2 GOPATH/src/gopkg.in/mgo.v2
func TestMongo() {
  var user []map[string]string
  cli, erro := mgo.Dial(Host)//建立连接,也可以为数据库设定密码连接方式也同样是user:pass@tcp(host:port)/databasename这样的,如果未设定用户直接填ip:port即可
  defer cli.Close()
  checkErro(erro)
  collection := cli.DB("account").C("account")//获取对应的集合
  collection.Find(nil).All(&user)//查询,一般使用bson.M格式查询
  log.Println(user)
  collection.Remove(bson.M{"li": "2333"})//删除对应记录
  info := map[string]string{
    "name":     "hades",
    "password": "123456",
    "sex":      "man",
  }
  collection.Insert(info)//增,增加如果存在则更新

}

关系型数据库的操作基本都是一样的,而非关系型数据库的操作则互不相同,常用的非关系型数据库也就Redis和MongoDB了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值