sqlite.go 826 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package db
  2. import (
  3. "github.com/eryajf/chatgpt-dingtalk/pkg/logger"
  4. "github.com/glebarez/sqlite"
  5. "gorm.io/gorm"
  6. )
  7. // 全局数据库对象
  8. var DB *gorm.DB
  9. // 初始化数据库
  10. func InitDB() {
  11. DB = ConnSqlite()
  12. dbAutoMigrate()
  13. }
  14. // 自动迁移表结构
  15. func dbAutoMigrate() {
  16. _ = DB.AutoMigrate(
  17. Chat{},
  18. )
  19. }
  20. func ConnSqlite() *gorm.DB {
  21. db, err := gorm.Open(sqlite.Open("data/dingtalkbot.sqlite"), &gorm.Config{
  22. // 禁用外键(指定外键时不会在mysql创建真实的外键约束)
  23. DisableForeignKeyConstraintWhenMigrating: true,
  24. })
  25. if err != nil {
  26. logger.Fatal("failed to connect sqlite3: %v", err)
  27. }
  28. dbObj, err := db.DB()
  29. if err != nil {
  30. logger.Fatal("failed to get sqlite3 obj: %v", err)
  31. }
  32. // 参见: https://github.com/glebarez/sqlite/issues/52
  33. dbObj.SetMaxOpenConns(1)
  34. return db
  35. }