// Project: go-orm // File: pkg/database/database.go // Package database 数据库连接 package database import ( "database/sql" "fmt" "github.com/runningwater/gohub/pkg/config" "gorm.io/gorm" gormlgger "gorm.io/gorm/logger" ) // DB 数据库连接实例 var DB *gorm.DB var SQLDB *sql.DB func Connect(dbConfig gorm.Dialector, _logger gormlgger.Interface) { // 使用 gorm.Open 连接数据库 var err error DB, err = gorm.Open(dbConfig, &gorm.Config{ Logger: _logger, }) // 处理错误 if err != nil { fmt.Println("数据库连接失败", err.Error()) } // 获取底层的 sql.DB 实例 SQLDB, err = DB.DB() if err != nil { fmt.Println("数据库连接失败", err.Error()) } } func CurrentDatabase() string { return DB.Migrator().CurrentDatabase() } func DeleteAllTables() error { var err error switch config.Get("database.connection") { case "mysql": err = deleteMySQLTables() case "sqlite": err = deleteAllSQLiteTables() default: err = fmt.Errorf("不支持的数据库类型: %s", config.Get("database.connection")) } return err } func deleteMySQLTables() error { dbname := CurrentDatabase() tables := []string{} err := DB.Table("information_schema.tables"). Where("table_schema = ?", dbname). Pluck("table_name", &tables).Error if err != nil { return err } // 暂时关闭外键检测 DB.Exec("SET FOREIGN_KEY_CHECKS = 0;") // 删除所有表 for _, table := range tables { if err := DB.Migrator().DropTable(table); err != nil { return err } } // 重新启用外键检测 DB.Exec("SET FOREIGN_KEY_CHECKS = 1;") return nil } func deleteAllSQLiteTables() error { tables := []string{} err := DB.Raw("SELECT name FROM sqlite_master WHERE type='table'"). Pluck("name", &tables).Error if err != nil { return err } // 删除所有表 for _, table := range tables { if err := DB.Migrator().DropTable(table); err != nil { return err } } return nil }