package main import ( "context" "database/sql" _ "embed" "fmt" "log" "strings" _ "github.com/mattn/go-sqlite3" "github.com/rocketlaunchr/dataframe-go" "github.com/rocketlaunchr/dataframe-go/imports" ) //go:embed iris.csv var irisData string func main() { db, err := sql.Open("sqlite3", ":memory:") if err != nil { log.Fatal(err) } defer db.Close() sqlStmt := ` create table iris ( sepal_length float, sepal_width float, petal_length float, petal_width float, class int); ` _, err = db.Exec(sqlStmt) if err != nil { log.Printf("%q: %s\n", err, sqlStmt) return } tx, err := db.Begin() if err != nil { log.Fatal(err) } stmt, err := tx.Prepare(` insert into iris( sepal_length, sepal_width, petal_length, petal_width, class) values(?, ?, ?, ?, ?) `) if err != nil { log.Fatal(err) } defer stmt.Close() df, err := imports.LoadFromCSV(context.Background(), strings.NewReader(irisData)) if err != nil { log.Fatal(err) } it := df.ValuesIterator(dataframe.ValuesOptions{ InitialRow: 0, Step: 1, DontReadLock: true, }) df.Lock() for { row, vals, _ := it() if row == nil { break } _, err = stmt.Exec( vals["sepal_length"], vals["sepal_width"], vals["petal_length"], vals["petal_width"], vals["class"], ) if err != nil { log.Fatal(err) } } df.Unlock() tx.Commit() rows, err := db.Query(`select json_object( 'sepal_length', sepal_length, 'sepal_width', sepal_width, 'petal_length', petal_length, 'petal_width', petal_width, 'class', class ) from iris `) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var r string err = rows.Scan(&r) if err != nil { log.Fatal(err) } fmt.Println(r) } err = rows.Err() if err != nil { log.Fatal(err) } }