- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经在此处和谷歌上遍历了相关问题。
我将 Gorm 与 SQLite3 结合使用。
每当我尝试在我的结构上运行任一函数时,我都会收到错误消息。当我调试并单步执行时,我看到表名是“”。 Gorm 没有得到我的结构名称,即 models.UserAuth。如果我调用 DropTable(models.UserAuth{}) 来显示没有名为 user_auth 的表(但至少它找出了表名)。当我浏览数据库时,当然没有表。
我的结构是
type UserAuth struct {
gorm.Model
ProfileID int `gorm:"not null" json:"profile_id"`
Username string `gorm:"size:20;unique_index" json:"username"`
Email string `gorm:"type:varchar(100);unique_index" json:"email"`
Password string `gorm:"not null" json:"password"`
Remember bool `gorm:"not null" json:"remeber"`
TwoFA bool `gorm:"not null" json:"twofa"`
Access int `gorm:"not null" json:"access"`
State int `gorm:"not null" json:"state"`
LastSeen string `gorm:"not null" json:"lastseen"``
}
我的 COMMON 迁移函数是:
func (d *Database) Migrate(m interface{}) {
logEntry := fmt.Sprintf("Auto Migrating %s...", reflect.TypeOf(m))
//d.db.DropTable(&models.UserAuth{})
//d.db.CreateTable(&models.UserAuth{})
// Do it the hard way
//if d.db.HasTable(&m) == false {
// Create table for model `User`
// d.db.CreateTable(&m)
// d.logThis.Info(fmt.Sprintf("%s %s with error %s", logEntry, "Failed", d.db.Error))
//}
// Migrate the schema
db := d.db.AutoMigrate(&m) //<--- Line 84
if db != nil && db.Error != nil {
//We have an error
d.logThis.Fatal(fmt.Sprintf("%s %s with error %s", logEntry, "Failed", db.Error))
}
d.logThis.Info(fmt.Sprintf("%s %s", logEntry, "Success"))
}
最后是它的调用方式:
app.Db.Migrate(models.UserAuth{})
开启调试的实际输出:
({PathToProject}/database/database.go:84)
[2018-07-23 06:12:24] near ")": syntax error
({PathToProject}/database/database.go:84)
[2018-07-23 06:12:24] [0.99ms] CREATE TABLE "" ( )
[0 rows affected or returned ]
仅供引用,反对票是不必要的——这是一个合理的问题,因为我在文档摘要页面上采用了 gorm 示例,基本上只是更改了结构。并且该结构使用了正确的基本类型(除了将其返回到原始帖子的代码中的 slice 之外)并且错误不是很有帮助。我看到在空白表名错误之前有一个 SYNTAX 错误 - 但为什么呢?我给 GORM 一个有效的结构了吗?
最佳答案
我很确定 sqlite 没有您的 AuthIPs ([]string) 的类型。我不确定 GORM 是否允许您编写自定义 Valuer 和 Scanner 接口(interface)方法,这些方法允许您将字符串转换为数组并再次转换回来,但您可能想要检查一下。
更新:将 db := d.db.AutoMigrate(&m)
更改为 db := d.db.AutoMigrate(m)
以允许反射获取类型名称。
如果你实现了tabler
接口(interface)你也可以更好的控制表名。
https://github.com/jinzhu/gorm/blob/master/scope.go#L305
type tabler interface {
TableName() string
}
关于Gorm AutoMigrate() 和 CreateTable() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51471973/
我使用 Go-GORM 连接到 cockrouch 数据库集群。我写了一个辅助函数来处理连接和自动迁移部分。一切正常,除非我想自动迁移超过 1 个模型。 err = helperdb.HandleMi
我的结构中有一个函数要迁移到数据库。是否有结构标签来防止 gorm 迁移结构中的特定字段? 最佳答案 完全忽略一个字段 如果您的结构包含模型和非模型成员。例如,只有一些字段应该被 Gorm 读取/保存
我已经在此处和谷歌上遍历了相关问题。 我将 Gorm 与 SQLite3 结合使用。 每当我尝试在我的结构上运行任一函数时,我都会收到错误消息。当我调试并单步执行时,我看到表名是“”。 Gorm 没有
我想对我的房间数据库做一个简单的更改:添加一个新表。 我的房间版本是:2.4.1根据https://medium.com/androiddevelopers/room-auto-migrations-
使用 Room AutoMigrations 时, Migration本身是自动生成的。但是为了unit test the migration ,我必须通过 Migration反对runMigrati
我试图实现一个简单的自动迁移,它只是将一个可为空的字符串字段添加到我唯一的表中,但由于某种原因,我在 autoMigrations = [AutoMigration(from = 1, to = 2)
我在我的项目中使用 Entity Framework 4.3 迁移。我想使用自动迁移,这样当我修改我的域对象和上下文类时,我的数据库会在我运行项目时自动更新。到目前为止我有这个工作。 除了自动迁移之外
我是一名优秀的程序员,十分优秀!