GORM
1. 安裝
go get -u github.com/jinzhu/gorm
要連接數據庫首先要導入驅動程序
// GORM已經包裝了一些驅動
import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"
2. 數據庫連接
// 數據庫連接
func main() {
// 1. MySQL
// 為了處理time.Time,需要parseTime為True
db1, err := gorm.Open("mysql", "user:password@(host:port)/dbname?charset=utf8&parseTime=True&loc=Local")
defer db1.Close()
if err != nil {
log.Fatal(err)
}
// 2. PostgreSQL
db2, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmodel=disable password=password")
defer db2.Close()
// 3. Sqlite3
db3, err := gorm.Open("sqlite3", "/tmp/gorm.db")
defer db3.Close()
}
GORM正式支持上述的數據庫,如果您使用的是不受支持的數據庫請按照本鏈接中的要求編寫對應數據庫支持文件。
3. 數據庫遷移及表操作
// 數據庫遷移
func main() {
// 1. 自動遷移
// 自動遷移僅僅會創建表,缺少列和索引,並且不會改變現有列的類型或刪除未使用的列以保護數據。
db, err := gorm.Open("mysql", "user:password@(host:port)/dbname?charset=utf8&parseTime=True&loc=Local")
defer db.Close()
if err != nil {
log.Fatal(err)
}
db.AutoMigrate(&User{})
//db.AutoMigrate(&User{}, &Product{}, &Order{})
// 創建表時添加表后綴
//db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})
// 2. 檢查表是否存在
// 2.1 檢查模型`User`是否存在
db.HasTable(&User{})
// 2.2 檢查表`user`是否存在
db.HasTable("user")
// 3. 創建表
// 3.1 為模型`User`創建表
db.CreateTable(&User{})
// 3.2 創建表時將"ENGINE=InnoDB"附加到SQL語句
db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})
// 4. 刪除表
// 4.1 刪除模型`User`的表
db.DropTable(&User{})
// 4.2 刪除表user
db.DropTable("user")
// 4.3 刪除刪除模型`User`的表和表`products`
db.DropTable(&User{}, "products")
// 5. 修改列
// 修改模型`User`的description列的數據類型為`text`
db.Model(&User{}).ModifyColumn("description", "text")
// 6. 刪除列
// 刪除模型`User·的description列
db.Model(&User{}).DropColumn("description")
// 7. 添加外鍵
// 添加主鍵
// 1st param : 外鍵字段
// 2nd param : 外鍵表(字段)
// 3rd param : ONDELETE
// 4th param : ONUPDATE
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")
// 8. 索引
// 8.1 為`name`列添加索引`idx_user_anme`
db.Model(&User{}).AddIndex("idx_user_name", "name")
// 8.2 為`name`,`age`列添加索引`idx_user_name_age`
db.Model(&User{}).AddIndex("idx_user_name_age", "name", "age")
// 8.3 添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name", "name")
// 8.4 為多列添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age")
// 8.5 刪除索引
db.Model(&User{}).RemoveIndex("idx_user_name")
}