3

尝试使用gorp进行 SELECT 时收到以下错误:

No table found for type: Post

这是我的代码的样子:

type Post struct {
    Id         int64  `db:"post_id"`
    CreatedAt  int64  `db:"created_at"`
    UpdatedAt  int64  `db:"updated"`
    Title      string `db:"title"`
}

var list []*Post
_, err := dbMapper.Select(&list, "SELECT * FROM posts")

if (err != nil) {
    fmt.Fprintf(writer, "%s", err)
    return
}

for _, item := range list {
    fmt.Fprintf(writer, "%s\n", item.Title)
}

我正在添加这样的表:

dbMapper.AddTableWithName(Post{}, "posts").SetKeys(true, "Id")
4

1 回答 1

1

看起来你没有做任何特别错误的事情。我使用驱动程序在本地运行了您的示例postgres(您没有指定您正在使用哪个驱动程序),它工作得很好 - 我猜这里缺少一些信息。需要确认的事项:

  • dbMapper.AddTableWithName(Post{}, "posts")在尝试使用它之前检查是否已调用该表。您引用的错误通常在AddTableWithName未调用时返回。
  • 检查该表是否确实存在于您的数据库中,并且您正在使用(类似的东西)连接到正确的数据库sql.Open("postgres", "user=postgres dbname=test")
  • 实例化 Gorp 时,请确保使用正确的方言:dbMapper := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}}对于 Postgres
  • 这可能与旧版本的 Gorp 有关 - 自从提出这个问题以来已经有几个月了,现在升级可能会解决这个问题。

除此之外,我认为我们需要更多信息才能深入了解这一点。

于 2014-05-25T12:19:31.070 回答