最近在学习beego ORM进行数据库的读写操作,可是在注册数据库的时候总是出现问题。main.go代码如下,在官方的[快速入门](https://beego.me/docs/mvc/model/overview.md#%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8)的基础上稍作了修改。
```
package main
import (
"fmt"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
//_ "lorm/models"
)
func init() {
orm.RegisterDriver("mysql", orm.DRMySQL)
orm.RegisterDataBase("default", "mysql", "root:$PASSWORD@/?charset=utf8")
orm.RegisterModel(new(User))
err := orm.RunSyncdb("default", false, true)
if err != nil {
fmt.Println(err) //Error 1046: No database selected
}
}
func main() {
o := orm.NewOrm()
o.Using("default") //
orm.Debug = true
dr := o.Driver()
fmt.Println(dr.Name() == "default") // true
fmt.Println(dr.Type() == orm.DRMySQL) // true
user := User{Name: "slene"}
// insert
id, err := o.Insert(&user)
fmt.Printf("ID: %d, ERR: %v\n", id, err) //ID: 0, ERR: Error 1046: No database selected
// update
user.Name = "astaxie"
num, err := o.Update(&user)
fmt.Printf("NUM: %d, ERR: %v\n", num, err) //NUM: 0, ERR: Error 1046: No database selected
// read one
u := User{Id: user.Id}
err = o.Read(&u)
fmt.Printf("ERR: %v\n", err) //ERR: Error 1046: No database selected
// delete
num, err = o.Delete(&u)
fmt.Printf("NUM: %d, ERR: %v\n", num, err) //NUM: 0, ERR: Error 1046: No database selected
}
type User struct {
Id int
Name string `orm:"size(100)"`
}
```
我看过一些别人写的例子,感觉我的代码结构上应该没什么问题。不过在初始化的RegisterDataBase函数应该是出现了问题,我用mysqlshow命令查看数据库时也没有发现新建的数据库,希望有大牛可以指点一下。
还有一个问题就是如果把RegisterDataBase函数中的第三个参数改成‘root:$PASSWORD@/test?charset=utf8’的话会报错,
```
[ORM]2017/03/14 15:25:28 register db Ping `default`, Error 1049: Unknown database 'test'
```
不过我看别人写的例子([1](http://blog.csdn.net/zistxym/article/details/21650149),[2](http://blog.csdn.net/z1134145881/article/details/52180550))里这么做就可以,想问一下是为什么。
root:$PASSWORD@/?charset=utf8 这个地方 ?的前面需要有数据库的,你先在mysql或者配合phpmyadmin创建一个数据库名
#1
更多评论
连接了一下之前创建的数据库,问题解决了。想问一下RegisterDataBase函数自己不能新建数据库是吗?它只是给创建的的数据库起个alias?
#2