db.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package admin
  2. import (
  3. "os"
  4. "strings"
  5. "github.com/qor5/x/login"
  6. "gorm.io/driver/postgres"
  7. "gorm.io/driver/sqlite"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. )
  11. var IsSqlite bool // 是否为Sqlite数据库
  12. func ConnectDB() (db *gorm.DB) {
  13. var err error
  14. // Ease 修改
  15. // 自动判断是否为sqlite3数据库: 以.db结尾,则为sqlite3数据库连接; 否则为postgresql数据库
  16. dbConnStr := os.Getenv("DB_PARAMS")
  17. if strings.HasSuffix(dbConnStr, ".db") {
  18. IsSqlite = true
  19. db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{
  20. DisableForeignKeyConstraintWhenMigrating: true, // 禁止gorm自动建立外键约束
  21. SkipDefaultTransaction: true, // 跳过默认事务
  22. })
  23. db.Exec("PRAGMA journal_mode = OFF;") // 设置数据库的日志模式: WAL/
  24. db.Exec("PRAGMA synchronous = OFF;") // 关闭写同步
  25. db.Exec("PRAGMA cache_size = 8000;") // 缓存大小(数据库文件页数): 1000000为页面缓存分配最大4GB的RAM
  26. db.Exec("PRAGMA temp_store = MEMORY;") // 临时存储放到内存中(临时表和索引会存储在内存中)
  27. // PRAGMA max_page_count 设置数据库文件最大的页数
  28. // PRAGMA page_size 数据库的页面大小
  29. sqlDB, err := db.DB()
  30. if err != nil {
  31. panic(err)
  32. }
  33. sqlDB.SetMaxIdleConns(10) // 设置空闲连接池中连接的最大数量
  34. sqlDB.SetMaxOpenConns(100) // 设置打开数据库连接的最大数量
  35. } else {
  36. db, err = gorm.Open(postgres.Open(dbConnStr)) // 通过环境变量连接数据库
  37. }
  38. if err != nil {
  39. panic(err)
  40. }
  41. autoMigrate(db)
  42. db.Logger = db.Logger.LogMode(logger.Info)
  43. return
  44. }
  45. func autoMigrate(db *gorm.DB) {
  46. err := db.AutoMigrate(
  47. &User{}, &UserFavorite{}, &UserFollow{}, &UserCategorize{},
  48. &DocumentCategorize{}, &Document{},
  49. )
  50. if err != nil { // 生成数据表
  51. panic(err)
  52. }
  53. }
  54. func initWebsiteData(db *gorm.DB) {
  55. var cnt int64
  56. if err := db.Table("page_builder_pages").Count(&cnt).Error; err != nil {
  57. panic(err)
  58. }
  59. if cnt == 0 {
  60. if err := db.Exec(initWebsiteSQL).Error; err != nil {
  61. panic(err)
  62. }
  63. }
  64. createDefaultManager(db)
  65. return
  66. }
  67. // 创建默认管理员
  68. func createDefaultManager(db *gorm.DB) {
  69. user := &User{ // 添加一个记录
  70. UserPass: login.UserPass{
  71. Account: "ease@scwy.net",
  72. Password: "yjz129",
  73. },
  74. }
  75. user.EncryptPassword() // 对密码加密
  76. db.Create(user)
  77. }
  78. // 创建缺省数据
  79. func initMediaLibraryData(db *gorm.DB) {
  80. var cnt int64
  81. if err := db.Table("media_libraries").Count(&cnt).Error; err != nil {
  82. panic(err)
  83. }
  84. if cnt == 0 {
  85. if err := db.Exec(initMediaLibrarySQL).Error; err != nil {
  86. panic(err)
  87. }
  88. }
  89. return
  90. }