Я пишу AWS лямбда для запроса 10 различных таблиц из RDS (SQL Server) с использованием Golang SDK. До сих пор я узнал, что мы должны создать аналогичную структуру для таблицы, чтобы запросить ее. Но так как я хочу сделать запрос к 10 таблицам, я не хочу создавать структуру для каждой таблицы, даже когда-нибудь схема таблицы может быть изменена.
В последнее время я хочу создать файл CSV для каждой таблицы как резервное копирование с запрошенными данными и загрузить его на S3. Так можно ли напрямую импортировать CSV-файл в лямбду, чтобы я мог напрямую загрузить его на S3? Вы можете видеть мой текущий код ниже
func executeQuery(dbconnection *sql.DB) {
println("\n\n----------Executing Query ----------")
query := "select TOP 5 City,State,Country from IMBookingApp.dbo.Address"
rows, err := dbconnection.Query(query)
if err != nil {
fmt.Println("Error:")
log.Fatal(err)
}
println("rows", rows)
defer rows.Close()
count := 0
for rows.Next() {
var City, State, Country string
rows.Columns
err := rows.Scan(&City, &State, &Country)
if err != nil {
fmt.Println("Error reading rows: " + err.Error())
}
fmt.Printf("City: %s, State: %s, Country: %s\n", City, State, Country)
count++
}
}
Этот код может работать только для таблицы Address
, но не для других таблиц
Я также попробовал его с GORM
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
)
type Currency struct {
CurrencyId int `gorm:"column:CurrencyId;"`
Code string `gorm:"column:Code;"`
Description string `gorm:"column:Description;"`
}
func main() {
db, err := gorm.Open("mssql", "sqlserver://***")
db.SingularTable(true)
gorm.DefaultTableNameHandler = func(dbVeiculosGorm *gorm.DB, defaultTableName string) string {
return "IMBookingApp.dbo.Currency"
}
fmt.Println("HasTable-Currency:", db.HasTable("ClientUser"))
var currency Currency
db.Debug().Find(¤cy)
fmt.Println("Currency:", currency)
fmt.Println("Error", err)
defer db.Close()
}
При обоих подходах я не смог найти способ сделать код обобщенным c для нескольких таблиц. Буду признателен, если кто-нибудь даст мне несколько советов или вы сможете указать на некоторые ресурсы.