首页 文章

尝试从模型创建表时出错

提问于
浏览
0

我今天开始玩gorm,但糟糕的是遇到了一些愚蠢的错误,我坚持了一段时间 . 起初我在Windows上运行MySQL 5(5.0.51b)和最新版本的go . 我确实得到gorm和mysql驱动程序,它编译没有错误,并且能够连接(可能),但每当我尝试基于声明的类型创建一个表时,它会抛出一个错误信息而不提供信息(因为错误是由MySQL抛出) . 这是我的代码:

mport (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type User struct {
    id int
}

func main() {
    db, err := gorm.Open("mysql", "root:vertrigo@/shop?charset=utf8&parseTime=True&loc=Local")
    fmt.Println(err)

    a := db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})

    fmt.Println(a)
}

因此该模型旨在非常基础,例如一列有一列 . 现在输出:

<nil>&{0x111e2230错误1064:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'1'附近使用正确的语法 . 发动机= InnoDB'在第1行0 0x112d4060 0x112d4000 0x112d8140 0 {0x112a3f20} false map [gorm:table_options:ENGINE = InnoDB] map []}

第一个是连接错误,这意味着它能够连接,但是查询它不是那么好,并且错误说除了gorm生成的SQL之外几乎没有因为某些原因而失败 . 所以问题是,是否有人知道为什么会抛出错误以及是否有任何解决方案 .

1 回答

  • 0

    尝试创建空表时发生该错误,例如:

    create table User() ENGINE=InnoDB
    

    gorm生成一个空表语句,因为User结构的id字段是私有的 .

    id int 更改为 ID int . Capitalising结构字段的第一个字母将其公开给外部包 .


    作为次要问题,而不仅仅是打印错误:

    db, err := gorm.Open(...
    fmt.Println(err)
    

    检查每个潜在的错误并立即处理它们是个好主意:

    db, err := gorm.Open(...
    if err != nil {
        log.Fatal(err)
    }
    

    对于其他错误,与大多数go代码相比,gorm's error handling有点不寻常 . 您可能希望经常使用db.GetErrors()检查错误 .

相关问题