Как импортировать CSV и сохранить в базе данных MSSQL с помощью Golang? - PullRequest
0 голосов
/ 02 октября 2018

Это мой код.В настоящее время я просто читаю содержимое файла CSV.Мне нужно перенести этот CSV-файл в MSSQL с помощью приложения Go Language

package main

import (
    "encoding/csv"
    "log"
    "os"
)

func main() {
    rows := readOrders("Ec2Instances.csv")
}

func readOrders(name string) [][]string {
    f, err := os.Open(name)
    if err != nil {
        log.Fatalf("Cannot open '%s': %s\n", name, err.Error())
    }
    defer f.Close()
    r := csv.NewReader(f)
    r.Comma = ';'
    rows, err := r.ReadAll()
    if err != nil {
        log.Fatalln("Cannot read CSV data:", err.Error())
    }
    return rows
}

. Я хочу, чтобы CSV-файл был специально записан в базу данных MSSQL.Я установил программное обеспечение MSSQL и SSMS.Как мне получить к ним доступ и записать в него данные?

1 Ответ

0 голосов
/ 03 октября 2018

Похоже, вы на полпути!

Ваш пример кода выглядит так, как будто он будет читать данные CSV из именованного файла.Следующим шагом будет подключение к экземпляру базы данных MSSQL и вставка строк из данных CSV.

Для этого вам потребуется найти драйвер golang для этой базы данных (denisenkom/go-mssqldb выглядит заслуживающим внимания, есть даже простой пример ) и следуйте шаблонам, установленным пакетом go database/sql (особенно примеры пакетов ).

Рабочее решение может выглядеть примерно так (не работает, но демонстративно):

import (
  "database/sql"
  _ "github.com/denisenkom/go-mssqldb"
  // ...
)

func main() {
  rows := readOrders("Ec2Instances.csv")
  insertRowsToDatabase(rows)
}

func insertRowsToDatabase(rows [][]string) {
  // Connect to the database.
  connString := "server=myserver;user id=123;password=secret;port=234"
  db, err := sql.Open("mssql", connString)
  if err != nil {
    log.Fatal("Open connection failed:", err.Error())
  }
  defer db.Close()

  // Insert the rows, omitting the first header row from the CSV.
  stmt, err := db.Prepare("INSERT INTO Ec2Instances(id, name) VALUES(?, ?)")
  if err != nil {
    log.Fatal(err)
  }
  for _, row := range rows[1:] {
    _, err := stmt.Exec(row[0], row[1])
    if err != nil {
      log.Fatal(err)
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...