| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // 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
- }
|