package database import ( "fmt" "os" "path/filepath" "github.com/glebarez/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" "vision-tool/internal/config" "vision-tool/internal/model" ) // Init 初始化数据库连接并执行 AutoMigrate。 // 使用 pure-go 的 glebarez/sqlite 驱动,CGO_ENABLED=0 下可编译运行。 func Init(cfg *config.DatabaseConfig) (*gorm.DB, error) { var db *gorm.DB var err error switch cfg.Driver { case "sqlite": fallthrough default: if dir := filepath.Dir(cfg.Path); dir != "" { if err := os.MkdirAll(dir, 0755); err != nil { return nil, fmt.Errorf("创建数据目录: %w", err) } } db, err = gorm.Open(sqlite.Open(cfg.Path), &gorm.Config{ Logger: logger.Default.LogMode(logger.Warn), }) } if err != nil { return nil, fmt.Errorf("连接数据库(%s): %w", cfg.Driver, err) } // auto_migrate:自动建表/更新表结构,生产环境建议手动管理 if cfg.AutoMigrate { if err := db.AutoMigrate(&model.User{}); err != nil { return nil, fmt.Errorf("自动建表: %w", err) } } return db, nil }