Bootstrap

【Go】使用Go语言连接mysql数据库

package main

import (
	"database/sql"
	"fmt"
	"log"
	"time"

	_ "github.com/go-sql-driver/mysql"
)

// 数据库配置结构体
type DBConfig struct {
	User     string
	Password string
	Host     string
	Port     string
	DBName   string
}

// 构建 DSN
func (config *DBConfig) DSN() string {
	return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", config.User, config.Password, config.Host, config.Port, config.DBName)
}

// 更新用户数据
func updateUser(dbAConfig, dbBConfig *DBConfig) {
	// 连接数据库A
	dbA, err := sql.Open("mysql", dbAConfig.DSN())
	if err != nil {
		log.Fatalf("连接数据库A失败: %v", err)
	}
	defer dbA.Close()

	// 连接数据库B
	dbB, err := sql.Open("mysql", dbBConfig.DSN())
	if err != nil {
		log.Fatalf("连接数据库B失败: %v", err)
	}
	defer dbB.Close()

	// 从数据库A读取数据
	rows, err := dbA.Query(`SELECT 
	    s1.username, s1.followers, s1.posts, s1.createTime
	FROM 
	    spider_media_user s1
	JOIN (
	    SELECT 
	        username, 
	        MAX(createTime) AS latest_createTime
	    FROM 
	        spider_media_user
	    GROUP BY 
	        username
	) s2 ON s1.username = s2.username AND s1.createTime = s2.latest_createTime;`)
	if err != nil {
		log.Fatalf("从数据库A读取数据失败: %v", err)
	}
	defer rows.Close()

	// 准备插入数据库B的语句
	updateStmt, err := dbB.Prepare(`UPDATE account_info SET followers_count = ?, posts_count = ?, update_time = ? WHERE account_name = ?`)
	if err != nil {
		log.Fatalf("准备更新语句失败: %v", err)
	}
	defer updateStmt.Close()

	// 遍历读取的数据并插入数据库B
	for rows.Next() {
		var username string
		var followers sql.NullInt64
		var posts sql.NullInt64
		var createTime string

		err := rows.Scan(&username, &followers, &posts, &createTime)
		if err != nil {
			log.Fatalf("扫描数据失败: %v", err)
		}

		_, err = updateStmt.Exec(followers, posts, createTime, username)
		if err != nil {
			log.Fatalf("更新数据到数据库B失败: %v", err)
		} else {
			fmt.Println("更新成功: ", username)
		}
	}

	if err = rows.Err(); err != nil {
		log.Fatalf("读取数据时发生错误: %v", err)
	}

	fmt.Println("数据更新完成!")
}

func main() {
	// 数据库A连接配置
	dbAConfig := &DBConfig{
		User:     "",
		Password: "",
		Host:     "",
		Port:     "",
		DBName:   "",
	}

	// 数据库B连接配置
	dbBConfig := &DBConfig{
		User:     "",
		Password: "",
		Host:     "127.0.0.1",
		Port:     "3306",
		DBName:   "",
	}

	// 更新用户数据
	updateUser(dbAConfig, dbBConfig)
}

;