Всегда возвращать пустые результаты, даже если записи существуют - PullRequest
1 голос
/ 03 марта 2020

Я использовал GORM .

Я пытался следовать примеру на документах.

У меня есть таблица в MySQL БД под названием "Attachments"

Вот как я пытался получить все записи:

    type Attachements struct {
        reference int
        status int
        statusDate Timestamp
        path string
    }

func main() {

    db, err := gorm.Open(
        "mysql", 
        "root:passord@(localhost)/dwg_transformer?charset=utf8&parseTime=True&loc=Local"
    )

    if err!=nil {
        panic("Cannot connect to DB")
    }

    db.DB()
    db.DB().Ping()
    defer db.Close()

    atts := []Attachements{}

    db.Find(&atts)
    fmt.Println(atts)

}

Я также пытался:

    rows, err := db.Model(&Attachements{}).Rows()
    defer rows.Close()

    if err != nil {
       panic(err)
    }

    att := Attachements{}

    for rows.Next() {
       db.ScanRows(rows, &att)
       fmt.Println(att)
    }

Я также попытался выполнить запрос по столбцу следующим образом:

    db.Where(&Attachements{status: 0}).Find(&atts)

    for _, v := range atts {
    fmt.Println("reference : ", v.reference)
    fmt.Println("path : ", v.path)
    }

Но во всем этом случае я получил пустой вывод (без печати, без пани c, без ошибок!)

Я пытался получить список всех таблиц следующим образом:

    tables := []string{}
    db.Select(&tables, "SHOW TABLES")
    fmt.Println(tables)

выводит меня: []

Но когда я проверяю, есть ли таблица "Вложения" существует, возвращает меня true:

    check:= db.HasTable("Attachements")
    fmt.Println(check)

Я не могу понять, что я пропустил (если так) ... Есть идеи?

Большое спасибо заранее любому GO dev wo может столкнуться с проблемой здесь ...

Вот скриншот MySQL WorkBench: мы видим таблицу Attachments и строки

ОБНОВЛЕНИЕ (03/03/20 19:00):

Я попытался экспортировать все поля, как указано в комментариях, например:

type Attachements struct {
    Reference int
    Status int
    StatusDate Timestamp
    Path string

   }

Результаты одинаковы: нет ошибок для всех тестов, d пустые выходы.

ОБНОВЛЕНИЕ (03/03/20 20:00):

Я добавил db.GetErrors(), потому что, как предлагается в комментариях, GORM не сообщает об ошибках автоматически:

[2020-03-03 19:58:05] Error 1146: Table 'dwg_transformer.attachements' doesn't exist

Почему мои таблицы получили строчные буквы?

1 Ответ

0 голосов
/ 03 марта 2020

Ваша последняя ошибка указывает на то, что таблица не существует.

Цитирование из GORM: Условные обозначения: множественное имя таблицы:

Имя таблицы является множественным версия имени структуры.

type User struct {} // default table name is `users`

// Set User's table name to be `profiles`
func (User) TableName() string {
  return "profiles"
}

Таким образом, GORM будет использовать имя таблицы по умолчанию attachements для вашей структуры Attachements. Либо измените имя таблицы в вашей базе данных на это, либо предоставьте метод TableName(), в котором вы вернете "Attachements", например:

func (Attachements) TableName() string {
   return "Attachements"
}
...