fox/db/db.go

55 lines
1.7 KiB
Go
Raw Permalink Normal View History

2025-05-25 20:02:15 +08:00
package db
import (
"fmt"
"github.com/go-redis/redis/v8"
2025-06-14 15:56:46 +08:00
"gorm.io/driver/clickhouse"
2025-05-25 20:02:15 +08:00
"gorm.io/driver/mysql"
"gorm.io/gorm"
2025-05-29 10:23:26 +08:00
"gorm.io/gorm/schema"
2025-06-16 01:05:57 +08:00
"net/url"
2025-05-25 20:02:15 +08:00
)
func InitMysql(username, password, address, port, dbName string) (*gorm.DB, error) {
dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4&parseTime=True&loc=Local", username, password, address, port, dbName)
2025-05-29 10:23:26 +08:00
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: &dbLogger{},
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名
},
})
2025-05-25 20:02:15 +08:00
return db, err
}
func InitRedis(password, address, port string, dbName int) (*redis.Client, error) {
rdb := redis.NewClient(&redis.Options{Addr: fmt.Sprintf("%v:%v", address, port), Password: password, DB: dbName})
if rdb == nil {
return nil, fmt.Errorf("init redis fail")
}
return rdb, nil
}
2025-06-14 15:56:46 +08:00
func InitClickHouse(host, port, user, password, database string) (*gorm.DB, error) {
2025-06-16 01:05:57 +08:00
password = url.QueryEscape(password)
dsn := fmt.Sprintf("clickhouse://%v:%v?database=%v&username=%v&password=%v&read_timeout=10s", host, port, database, user, password)
fmt.Println(dsn)
2025-06-14 15:56:46 +08:00
db, err := gorm.Open(clickhouse.Open(dsn), &gorm.Config{
Logger: &dbLogger{},
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 使用单数表名
},
})
return db, err
}
2025-06-15 13:43:03 +08:00
func AutoMigrateClickHouse(db *gorm.DB, tableOptions string, table any) error {
2025-06-14 15:56:46 +08:00
// 带ClickHouse引擎的迁移
2025-06-15 13:43:03 +08:00
//return db.Set("gorm:table_options", "ENGINE=MergeTree() ORDER BY tuple()").AutoMigrate(table)
return db.Set("gorm:table_options", tableOptions).AutoMigrate(table)
2025-06-14 15:56:46 +08:00
}
func InitClickHouse2(host, port, user, password, database string) (*ClickHouseRepo, error) {
2025-05-25 20:02:15 +08:00
ch := NewClickHouseRepo(host, port, user, password, database)
return ch, ch.Open()
}