github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/cmd/test/others/func/import/xiehouyu.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "flag" 6 "fmt" 7 "strings" 8 9 "github.com/easysoft/zendata/cmd/test/others/func/comm" 10 "github.com/easysoft/zendata/cmd/test/others/func/model" 11 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 12 ) 13 14 func main() { 15 var insertTemplate = "INSERT INTO %s (riddle, answer) VALUES %s;" 16 var createTableTempl = `CREATE TABLE IF NOT EXISTS %s ( 17 id bigint auto_increment, 18 riddle varchar(1000) not null, 19 answer varchar(1000) not null, 20 tag varchar(50), 21 primary key(id) 22 ) engine=innodb default charset=utf8 auto_increment=1;` 23 24 var tableName string 25 var filePath string 26 27 flag.StringVar(&tableName, "t", "", "") 28 flag.StringVar(&filePath, "f", "", "") 29 30 flag.Parse() 31 32 tableName = "biz_" + strings.TrimLeft(tableName, "biz_") 33 db := comm.GetDB() 34 db.Exec(fmt.Sprintf(comm.TruncateTable, tableName)) 35 36 createTableSql := fmt.Sprintf(createTableTempl, tableName) 37 err := db.Exec(createTableSql).Error 38 if err != nil { 39 fmt.Printf("create table %s failed, err %s", tableName, err.Error()) 40 return 41 } 42 43 content := fileUtils.ReadFileBuf(filePath) 44 records := make([]model.DataXiehouyu, 0) 45 json.Unmarshal(content, &records) 46 47 insertSqlArr := make([]string, 0) 48 49 for _, record := range records { 50 riddle := record.Riddle 51 answer := record.Answer 52 53 insert := fmt.Sprintf("('%s', '%s')", riddle, answer) 54 insertSqlArr = append(insertSqlArr, insert) 55 } 56 57 for i := 0; i < 1000; i++ { 58 start := i * 10000 59 end := (i + 1) * 10000 60 61 if end > len(insertSqlArr) { 62 end = len(insertSqlArr) 63 } 64 65 arr := insertSqlArr[start:end] 66 67 sql := fmt.Sprintf(insertTemplate, tableName, strings.Join(arr, ",")) 68 err = db.Exec(sql).Error 69 if err != nil { 70 fmt.Printf("insert data failed, err %s", err.Error()) 71 return 72 } 73 74 if end >= len(insertSqlArr) { 75 break 76 } 77 } 78 }