Skip to content

Instantly share code, notes, and snippets.

@mackee
Last active August 29, 2015 14:03
Show Gist options
  • Save mackee/351c5ca9f415b4245bb9 to your computer and use it in GitHub Desktop.
Save mackee/351c5ca9f415b4245bb9 to your computer and use it in GitHub Desktop.
package main
import (
"encoding/json"
"fmt"
"github.com/ziutek/mymysql/mysql"
_ "github.com/ziutek/mymysql/native"
"io"
"log"
"os"
)
type WikiRow struct {
Title string `json:"title"`
Url string `json:"url"`
Abstract string `json:"abstract"`
}
const (
JSONPATH = "../minimum.json"
)
func main() {
file, err := os.Open(JSONPATH)
if err != nil {
log.Fatalf("Open File Error: %s", err)
}
db := mysql.New("tcp", "", "127.0.0.1:3306", "root", "", "test")
if err := db.Connect(); err != nil {
log.Fatalf("Connect Error: %s", err)
}
db.Register(`SET NAMES utf8mb4`)
stmt, err := db.Prepare(`INSERT INTO wikipedia (title, title_full, url, abstract) VALUES(?, ?, ?, ?)`)
if err != nil {
log.Fatalf("Prepare Error: %s", err)
}
dec := json.NewDecoder(file)
i := 0
for {
var row WikiRow
if err := dec.Decode(&row); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
titleRunes := []rune(row.Title)
if len(titleRunes) > 191 {
titleRunes = titleRunes[0:190]
}
_, err := stmt.Run(string(titleRunes), row.Title, row.Url, row.Abstract)
if err != nil {
log.Fatalf("Query Error: %s", err)
}
i++
fmt.Printf("\r% 10d", i)
}
fmt.Printf("\ndone\n")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment