如何使用Beego框架进行数据库迁移?

4
我需要向现有表格添加一个新字段,在Beego中应该如何正确进行处理?
我熟悉Django的south,首先使用manage.py schema_migration生成迁移脚本,然后执行迁移脚本manage.py migrate.
在Beego中,有一个命令bee generate migration来在database/migrations/xxx.go中生成迁移脚本。但是我不知道如何使用这个生成的脚本,它似乎没有与任何东西连接。
而且我没有看到任何关于迁移的文档提及。
3个回答

7

我遇到了同样的问题,我使用MySql。这是我的解决方法——

使用bee generate创建迁移文件:

$ bee generate migration user
2016/06/26 13:36:31 [INFO] Using 'user' as migration name
2016/06/26 13:36:32 [INFO] Migration file generated: /path/to/project/database/migrations/20160626_140247_user.go
2016/06/26 13:36:32 [SUCC] generate successfully created!

现在将生成文件,下面是文件的内容:
package main

import (
    "github.com/astaxie/beego/migration"
)

// DO NOT MODIFY
type User_20160626_140247 struct {
    migration.Migration
}

// DO NOT MODIFY
func init() {
    m := &User_20160626_140247{}
    m.Created = "20160626_140247"
    migration.Register("User_20160626_140247", m)
}

// Run the migrations
func (m *User_20160626_140247) Up() {
    // use m.SQL("CREATE TABLE ...") to make schema update

}

// Reverse the migrations
func (m *User_20160626_140247) Down() {
    // use m.SQL("DROP TABLE ...") to reverse schema update

}

更新了UpDown方法。在这些方法的注释中,您可以看到可以调用m.SQL来运行原始的SQL查询。在此处,您可以使用alter命令来更新结构。

完成更改后,您可以运行bee migrate来应用这些迁移。以下是示例-

$bee migrate -conn="username:password@tcp(127.0.0.1:3306)/mydb"

希望这可以帮助到您。

我遇到了麻烦,这个迁移脚本有没有办法在不需要在up和down函数中实际输入任何原始SQL的情况下工作?当我使用gorm时似乎没有这个问题,所以我想问一下。 - Eduardo Castillo
@Ritesh 如果我想在生产服务器上运行迁移怎么办?mysql远程访问被撤销了。虽然我有ssh访问权限,但是除了允许mysql远程访问之外还有其他方法吗? - musafar006

0

Postgres的示例 bee migrate -driver=postgres -conn="postgres://my_user:my_pass@my_host:my_port/my_db?sslmode=disable"


0

我认为你还需要在beego的迁移文件中添加以下内容: bee migrate -driver='mysql' -conn='root:@tcp(127.0.0.1:3306)/test'


2
请补充更多信息。仅有代码和“试试这个”类型的回答是不被鼓励的,因为它们没有可搜索的内容,也没有解释为什么有人应该“试试这个”。我们在这里努力成为知识的资源。 - Mogsdad
有没有办法在每次输入数据库凭据的情况下应用迁移? - Oleksandr Savchenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接