go 操作数据库

内容

1 database/sql基本操作
2 gorm基本操作

1 database/sql

  • 初始化一个数据库连接
    sql包是go提供的原生的数据库操作接口,所以第一步需要引入相应数据库的驱动
import (
    "database/sql"

    _ "github.com/go-sql-driver/mysql" // 引入mysql驱动
)

func main() {
    dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        panic(err)
    }
    defer db.Close() // 注意这行代码要写在上面err判断的下面,如果open时,db对象没有初始成功,就调用了close,要报错
}
  • 初始化连接
    Open方法只是初始化了一个db对象,并没有进行连接,一种懒加载思想,待用到这个连接时在尝试去建立连接
// 尝试与数据库建立连接(校验dsn是否正确)
    err = db.Ping()
    if err != nil {
        return err
    }
    return nil
  • 进行增、删、改、查
增、删、改都通过Exec方法进行操作
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
增,删除和更新一样的,编写相应sql即可
func insert() {
    sqlStr := "insert into user(name, age) values (?,?)"
    ret, err := db.Exec(sqlStr, "11", 11)
    if err != nil {
        return
    }
     // 获取插入id
    theID, err := ret.LastInsertId() 
    if err != nil {
        fmt.Printf("get lastinsert ID failed, err:%v\n", err)
        return
    }
    fmt.Printf("insert success, the id is %d.\n", theID)
}

查询:

查询单条数据
func queryRowDemo() error {
    sqlStr := "select id, name, age from user where id=?"
    var u user

    err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age)
    if err != nil {
        return err
    }
}

查询多条数据
func queryMultiRowDemo() error {
    sqlStr := "select id, name, age from user where id > ?"
    rows, err := db.Query(sqlStr, 0)
    if err != nil {
        return err
    }
    defer rows.Close()

    // 循环读取结果集中的数据
    for rows.Next() {
        var u user
        err := rows.Scan(&u.id, &u.name, &u.age)
        if err != nil {
            return err
        }
    }
}
  • prepare()进行sql预编译
func (db *DB) Prepare(query string) (*Stmt, error)
func prepareInsertDemo()  error {
    sqlStr := "insert into user(name, age) values (?,?)"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        return err
    }
    defer stmt.Close()
    _, err = stmt.Exec("小王子", 18)
    if err != nil {
        return err
    }
    _, err = stmt.Exec("沙河娜扎", 18)
    if err != nil {
        return err
    }
}
  • 事务处理
func (db *DB) Begin() (*Tx, error)
func (tx *Tx) Commit() error
func (tx *Tx) Rollback() error

2 gorm 基本操作

  • GORM中午文档:https://gorm.io/zh_CN/docs/models.html
  • Go语言操作MySQL:https://www.liwenzhou.com/posts/Go/go_mysql/

你可能感兴趣的:(go 操作数据库)