@qwentry

Как пробежаться по массиву и сделать Insert в бд?

Как пробежаться по массиву и все записать в БД?
Есть пример обычного перебора массива с выводом в консоль
package main

import "fmt"

type User struct {
  UserName string
  Category string
  Age      int
}

type Users []User

func (u Users) NameList() []string {
  var list []string
  for _, user := range u {
    list = append(list, user.UserName)
  }
  return list
}

func main() {
  users := Users{
    User{UserName: "Bryan", Category: "Human", Age: 33},
    User{UserName: "Jane", Category: "Rocker", Age: 25},
    User{UserName: "Nancy", Category: "Mother", Age: 40},
    User{UserName: "Chris", Category: "Dude", Age: 19},
    User{UserName: "Martha", Category: "Cook", Age: 52},
  }

  UserList := users.NameList()

  fmt.Println(UserList)
}


Можете на этом примере объяснить как все это insert в базу сделать?

psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
    "password=%s dbname=%s sslmode=disable",
    host, port, user, password, dbname)
  db, err := sql.Open("postgres", psqlInfo)
  if err != nil {
    panic(err)
  }
  defer db.Close()

Подключение к базе знаю, так же банально как добавить\удалить\обновить и тд, но как с перебором данных массива не понимаю...

Можете направить? Или примером или на статью какую-то
Заранее спасибо
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Если брать за основу ваш код - примерно так можно сделать
package main

import "fmt"

type User struct {
  UserName string
  Category string
  Age      int
}

func main() {

  users := []User{
    User{UserName: "Bryan", Category: "Human", Age: 33},
    User{UserName: "Jane", Category: "Rocker", Age: 25},
    User{UserName: "Nancy", Category: "Mother", Age: 40},
    User{UserName: "Chris", Category: "Dude", Age: 19},
    User{UserName: "Martha", Category: "Cook", Age: 52},
  }

  // подключаетесь к базе
  db, _ := sql.Open(...)
  defer db.Close()

  for _, user := range users {
      fmt.Println(user)
      // делаете запрос в базу
      db.Exec("INSERT INTO users (name, category, age) VALUES ($1, $2, $3)", user.UserName, user.Category, user.Age)
  }
}

Если данных для вставки в базу будет много - такой вариант будет тормозить, в этом случае лучше делать вставку в транзакции
tx, _ := db.Begin()  // начинаете транзакцию
for _, user := range users {
    fmt.Println(user)
    // делаете запрос в базу (тут уже не db, а tx.Exec)
    tx.Exec("INSERT INTO users (name, category, age) VALUES ($1, $2, $3)", user.UserName, user.Category, user.Age)
}
tx.Commit() // завершаете транзакцию, данные сохраняются в базе
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы