zoukankan      html  css  js  c++  java
  • GORM基本使用

    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")
    }
    
  • 相关阅读:
    111
    使用正则表达式,取得点击次数,函数抽离
    爬虫大作业
    Hadoop综合大作业
    hive基本操作与应用
    熟悉HBase基本操作
    爬虫大作业
    第三章 熟悉常用的HDFS操作
    数据结构化与保存
    用正则表达式,取得点击次数,函数抽离
  • 原文地址:https://www.cnblogs.com/zj420255586/p/12831456.html
Copyright © 2011-2022 走看看