数据库

    为了方便记住导入路径,GORM包装了一些驱动。

    1. // import _ "github.com/jinzhu/gorm/dialects/postgres"
    2. // import _ "github.com/jinzhu/gorm/dialects/sqlite"
    3. // import _ "github.com/jinzhu/gorm/dialects/mssql"
    1. import (
    2. "github.com/jinzhu/gorm"
    3. )
    4. func main() {
    5. db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
    6. defer db.Close()
    7. }

    PostgreSQL

    1. import (
    2. _ "github.com/jinzhu/gorm/dialects/postgres"
    3. )
    4. func main() {
    5. db, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmode=disable password=mypassword")
    6. defer db.Close()
    7. }

    Sqlite3

    不支持的数据库

    GORM正式支持上述的数据库,如果您使用的是不受支持的数据库请按照下面的连接编写对应数据库支持文件。

    迁移 {#m}

    警告:自动迁移仅仅会创建表,缺少列和索引,并且不会改变现有列的类型或删除未使用的列以保护数据。

    1. db.AutoMigrate(&User{})
    2. db.AutoMigrate(&User{}, &Product{}, &Order{})
    3. // 创建表时添加表后缀

    检查表是否存在

    1. // 检查模型`User`表是否存在
    2. db.HasTable(&User{})
    3. // 检查表`users`是否存在
    4. db.HasTable("users")

    创建表

    1. // 为模型`User`创建表
    2. db.CreateTable(&User{})
    3. // 创建表`users'时将“ENGINE = InnoDB”附加到SQL语句
    4. db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})

    删除表

    1. // 修改模型`User`的description列的数据类型为`text`
    2. db.Model(&User{}).ModifyColumn("description", "text")

    删除列

    1. // 删除模型`User`的description列
    2. db.Model(&User{}).DropColumn("description")

    添加外键

    1. // 添加主键
    2. // 1st param : 外键字段
    3. // 2nd param : 外键表(字段)
    4. // 3rd param : ONDELETE
    5. db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT")

    索引