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  }