gpt4 book ai didi

go - 如何使用 TOML 装置在使用 Go Buffalo 框架的开发环境中为我的数据库播种?

转载 作者:行者123 更新时间:2023-12-03 07:58:38 24 4
gpt4 key购买 nike

我正在尝试使用 TOML 固定装置在 Go Buffalo 框架中植入我的开发数据库。但是,我无法找到有关如何执行此操作的清晰示例或文档。

最佳答案

要为数据库添加种子,您可以使用 grifts。创建新应用程序时,应该在 grifts/db.go 处生成一个虚拟占位符 grift,如下所示:

package grifts

import "github.com/gobuffalo/grift/grift"

var _ = grift.Namespace("db", func() {

grift.Desc("seed", "Seeds a database")
grift.Add("seed", func(c *grift.Context) error {
// Add DB seeding stuff here
return nil
})

})

我尝试在grift中使用model.LoadFixture("seed widgets"),但由于它不在测试环境中,所以出现了一些 panic 。我认为不直接支持从 toml 装置进行数据库播种,但这将是一个有用的功能。但是查看 LoadFixture 中的代码,我们可以构建自己的夹具加载:

假设您有一个名为 name = "seed widgets"的场景的固定装置:

package grifts

import (
"fmt"
"os"
"strings"

"github.com/gobuffalo/grift/grift"
"github.com/gobuffalo/suite/v4"
"github.com/gobuffalo/suite/v4/fix"
)

var _ = grift.Namespace("db", func() {

grift.Desc("seed", "Seeds a database")
grift.Add("seed", func(c *grift.Context) error {
// The DB connection will connect to the environment set in `GO_ENV` (defaults to `test`)
// Set this environment variable in your `.env` file to `development`

// NOTE: it may be better to put seed fixtures in a different directory
// to seperate concerns
model, err := suite.NewModelWithFixtures(os.DirFS("./fixtures"))
if err != nil {
return err
}

sc, err := fix.Find("seed widgets")
if err != nil {
return err
}

for _, table := range sc.Tables {
for _, row := range table.Row {
q := "insert into " + table.Name
keys := []string{}
skeys := []string{}
for k := range row {
keys = append(keys, k)
skeys = append(skeys, ":"+k)
}

q = q + fmt.Sprintf(" (%s) values (%s)", strings.Join(keys, ","), strings.Join(skeys, ","))
if _, err = model.DB.Store.NamedExec(q, row); err != nil {
return err
}
}
}

return nil
})

})

关于go - 如何使用 TOML 装置在使用 Go Buffalo 框架的开发环境中为我的数据库播种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75162669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com