golang gorm框架数据库的连接操作示例

作者:Jeff的技术栈 时间:2024-01-21 06:52:56 

1. 连接数据库

要连接到数据库首先要导入驱动程序。例如

import _ "github.com/go-sql-driver/mysql"

为了方便记住导入路径,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"

1.1 MySQL

注:为了处理time.Time,您需要包括parseTime作为参数。 (更多支持的参数)

import (
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)
func main() {
 db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
 defer db.Close()
}

1.2 PostgreSQL

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

1.3 Sqlite3

import (
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/sqlite"
)
func main() {
 db, err := gorm.Open("sqlite3", "/tmp/gorm.db")
 defer db.Close()
}

1.4 不支持的数据库

GORM正式支持上述的数据库,如果您使用的是不受支持的数据库请按照下面的连接编写对应数据库支持文件。 https://github.com/jinzhu/gorm/blob/master/dialect.go

2. 迁移

2.1. 自动迁移

自动迁移模式将保持更新到最新。

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

db.AutoMigrate(&User{})
db.AutoMigrate(&User{}, &Product{}, &Order{})
// 创建表时添加表后缀
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})

2.2. 检查表是否存在

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

2.3. 创建表

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

2.4. 删除表

// 删除模型`User`的表
db.DropTable(&User{})
// 删除表`users`
db.DropTable("users")
// 删除模型`User`的表和表`products`
db.DropTableIfExists(&User{}, "products")

2.5. 修改列

修改列的类型为给定值

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

2.6. 删除列

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

2.7. 添加外键

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

2.8. 索引

// 为`name`列添加索引`idx_user_name`
db.Model(&User{}).AddIndex("idx_user_name", "name")
// 为`name`, `age`列添加索引`idx_user_name_age`
db.Model(&User{}).AddIndex("idx_user_name_age", "name", "age")
// 添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name", "name")
// 为多列添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age")
// 删除索引
db.Model(&User{}).RemoveIndex("idx_user_name")

来源:https://www.cnblogs.com/guyouyin123/p/14109856.html

标签:golang,gorm,数据库,操作
0
投稿

猜你喜欢

  • pytorch:model.train和model.eval用法及区别详解

    2022-07-13 19:22:51
  • JavaScript调用ajax获取文本文件内容实现代码

    2024-04-30 10:15:52
  • Python办公自动化Word转Excel文件批量处理

    2022-06-24 21:02:23
  • 基于tensorflow指定GPU运行及GPU资源分配的几种方式小结

    2021-10-03 10:22:27
  • JS数组去重的九种高阶方法(亲测有效)

    2024-04-19 10:57:45
  • 加快Firefox 3.5启动速度的方法

    2009-07-16 15:22:00
  • vue递归获取父元素的元素实例

    2024-05-05 09:24:34
  • Flask之请求钩子的实现

    2023-06-27 10:43:59
  • VSCode必装Go语言以下插件的思路详解

    2024-04-30 09:53:42
  • Vue.js添加组件操作示例

    2024-05-11 09:16:32
  • vue调用本地摄像头实现拍照功能

    2024-04-28 09:21:46
  • 使用setup.py安装python包和卸载python包的方法

    2023-01-31 02:20:47
  • 菜鸟课堂:MSSQL的安全设置问题解答

    2009-10-29 13:22:00
  • Python help()函数用法详解

    2022-09-15 13:15:34
  • Docker安装常用组件(mysql,redis)的方法

    2024-01-28 02:44:56
  • vue混入mixin流程与优缺点详解

    2024-05-02 16:35:12
  • GraphQL在Django中的使用教程

    2023-02-20 18:11:31
  • PHP执行linux系统命令的常用函数使用说明

    2023-10-19 11:28:39
  • python使用opencv按一定间隔截取视频帧

    2021-10-29 01:27:14
  • python 实现将小图片放到另一个较大的白色或黑色背景图片中

    2022-03-26 00:21:36
  • asp之家 网络编程 m.aspxhome.com