无法使用* DB.Rows()获取所有行

我是gorm的新手,所以如果我误解了一点,请指出。


我正在使用MySQL编写小型应用程序,因此决定将gorm用作ORM。源代码和输出如下。


package main


import (

    "fmt"

    "log"


    "github.com/jinzhu/gorm"

    _ "github.com/jinzhu/gorm/dialects/mysql"

)


type Group struct {

    gorm.Model

    Name string `gorm:"not null;unique"`

}


func openDB() *gorm.DB {

    user := "ipmonitor"

    password := "testpassword"

    database := "ipmonitor"


    mysqlURL := "%s:%s@/%s?charset=utf8mb4&parseTime=True&loc=Local"


    db, err := gorm.Open("mysql", fmt.Sprintf(mysqlURL, user, password, database))

    if err != nil {

        log.Fatalln(err)

    }


    return db

}


func initDB(db *gorm.DB) {

    db = db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4")

    db.AutoMigrate(&Group{})


    result := db.Create(&Group{Name: "foo"})

    if result.Error != nil {

        log.Fatalln(result.Error)

    }

    result = db.Create(&Group{Name: "bar"})

    if result.Error != nil {

        log.Fatalln(result.Error)

    }

    result = db.Create(&Group{Name: "baz"})

    if result.Error != nil {

        log.Fatalln(result.Error)

    }

}


func main() {

    db := openDB()

    db.LogMode(true)

    initDB(db)


    records := db.Find(&Group{})

    if records.Error != nil {

        log.Fatalln(records.Error)

    }


    log.Printf("%d rows found.", records.RowsAffected)

    rows, err := records.Rows()

    if err != nil {

        log.Fatalln(err)

    }

    defer rows.Close()


    for rows.Next() {

        var group Group

        err := db.ScanRows(rows, &group)

        if err != nil {

            log.Fatalln(err)

        }


        log.Printf("%+v\n", group)

    }

    if rows.Err() != nil {

        log.Fatalln(rows.Err())

    }

}

我希望该*DB.Find().Rows()方法返回多行,但似乎只返回最后一行。

根据gorm debug输出,似乎在执行SELECT语句时添加了未指定的条件。

谷歌搜索后,我无法找出问题的原因。为什么我的代码不起作用?


小唯快跑啊
浏览 328回答 1
1回答

慕尼黑的夜晚无繁华

您可以尝试这种替代方法:var records []Groupdb.Find(&records)所有数据都可以在中作为数组使用records。如果您需要处理错误:if err := db.Find(&records).Error; err != nil {  log.Fatalln(err)}log.Printf("%d rows found.", len(records))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go