当前位置: 首页 > news >正文

大连英文网站建设精准粉丝引流推广

大连英文网站建设,精准粉丝引流推广,动态网站用什么语言做的,山海关网站制作gorm连接mysql数据库以及建表和自动迁移前言连接连接数据库配置mysql配置gorm常规数据库接口-连接池迁移自动迁移建表手动迁移建表Migrator接口常用的Migrator方法创建表是否存在表删除表重命名表更多的api前言 本书皆是对官方文档常用的内容进行描述 包括:连接数…

gorm连接mysql数据库以及建表和自动迁移

  • 前言
  • 连接
    • 连接数据库
    • 配置mysql
    • 配置gorm
    • 常规数据库接口-连接池
  • 迁移
    • 自动迁移建表
    • 手动迁移建表
    • Migrator接口
  • 常用的Migrator方法
    • 创建表
    • 是否存在表
    • 删除表
    • 重命名表
    • 更多的api

前言

本书皆是对官方文档常用的内容进行描述

包括:连接数据库,建表,自动迁移,Migrator接口

连接

连接数据库

连接到数据库

最简单的连接方式

import ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)func main() {//dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})//想要正确的处理 time.Time ,您需要带上 parseTime 参数, (更多参数) 要支持完整的 UTF-8 编码,您需要将 charset=utf8 更改为 charset=utf8mb4 查看 此文章 获取详情dsn := "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})fmt.Println(db, err)
}

配置mysql

但是我们在使用的过程中,还会对数据库连接进行一些设置,MySQl 驱动程序提供了 一些高级配置 可以在初始化过程中使用。更多配置见官方文档

func main() {dsn := "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.New(mysql.Config{DSN:                       dsn,DefaultStringSize:         256,   // string 类型字段的默认长度DisableDatetimePrecision:  true,  // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持DontSupportRenameIndex:    true,  // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引DontSupportRenameColumn:   true,  // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置}), &gorm.Config{})fmt.Println(db, err)
}

配置gorm

不仅仅是mysql连接可以配置,我们对gorm也可以进行配置。更多配置见官方文档

GORM 配置

func main() {dsn := "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.New(mysql.Config{DSN: dsn,}), &gorm.Config{SkipDefaultTransaction: false, //跳过默认事务NamingStrategy: schema.NamingStrategy{SingularTable: true, // 复数形式 User的表名应该是usersTablePrefix:   "t_", //表名前缀 User的表名应该是t_users},DisableForeignKeyConstraintWhenMigrating: true, //设置成为逻辑外键(在物理数据库上没有外键,仅体现在代码上)})fmt.Println(db, err)
}

常规数据库接口-连接池

GORM 提供了 DB 方法,可用于从当前 *gorm.DB 返回一个通用的数据库接口 *sql.DB

func main() {dsn := "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.New(mysql.Config{DSN: dsn,}), &gorm.Config{SkipDefaultTransaction: false, //跳过默认事务NamingStrategy: schema.NamingStrategy{SingularTable: false,  // 复数形式 User的表名应该是usersTablePrefix:   "gva_", //表名前缀 User的表名应该是t_users},DisableForeignKeyConstraintWhenMigrating: true, //设置成为逻辑外键(在物理数据库上没有外键,仅体现在代码上)})// 获取通用数据库对象 sql.DB ,然后使用其提供的功能sqlDB, err := db.DB()// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。sqlDB.SetMaxIdleConns(10)// SetMaxOpenConns 设置打开数据库连接的最大数量。sqlDB.SetMaxOpenConns(100)// SetConnMaxLifetime 设置了连接可复用的最大时间。sqlDB.SetConnMaxLifetime(time.Hour)
}

迁移

迁移

自动迁移建表

func main() {dsn := "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.New(mysql.Config{DSN: dsn,}), &gorm.Config{SkipDefaultTransaction: false, //跳过默认事务NamingStrategy: schema.NamingStrategy{SingularTable: true, // 复数形式 User的表名应该是usersTablePrefix:   "gva_", //表名前缀 User的表名应该是t_users},DisableForeignKeyConstraintWhenMigrating: true, //设置成为逻辑外键(在物理数据库上没有外键,仅体现在代码上)})fmt.Println(db, err)type User struct {Name string}err = db.AutoMigrate(&User{})if err != nil {fmt.Println(err)}
}

在这里插入图片描述

手动迁移建表

我们查看db.AutoMigrate,发现其内部是调用了一个接口type Migrator interface,里面有很多方法,Migrator 接口是一个统一的ap接口

func (db *DB) AutoMigrate(dst ...interface{}) error {return db.Migrator().AutoMigrate(dst...)
}
// Migrator migrator interface
type Migrator interface {//下一小节
}

所以我们可以自动去建表

m:=db.Migrator()
m.CreateTable(&User{})

Migrator接口

我们发现该接口有很多方法

// Migrator migrator interface
type Migrator interface {// AutoMigrateAutoMigrate(dst ...interface{}) error// DatabaseCurrentDatabase() stringFullDataTypeOf(*schema.Field) clause.Expr// TablesCreateTable(dst ...interface{}) errorDropTable(dst ...interface{}) errorHasTable(dst interface{}) boolRenameTable(oldName, newName interface{}) errorGetTables() (tableList []string, err error)// ColumnsAddColumn(dst interface{}, field string) errorDropColumn(dst interface{}, field string) errorAlterColumn(dst interface{}, field string) errorMigrateColumn(dst interface{}, field *schema.Field, columnType ColumnType) errorHasColumn(dst interface{}, field string) boolRenameColumn(dst interface{}, oldName, field string) errorColumnTypes(dst interface{}) ([]ColumnType, error)// ViewsCreateView(name string, option ViewOption) errorDropView(name string) error// ConstraintsCreateConstraint(dst interface{}, name string) errorDropConstraint(dst interface{}, name string) errorHasConstraint(dst interface{}, name string) bool// IndexesCreateIndex(dst interface{}, name string) errorDropIndex(dst interface{}, name string) errorHasIndex(dst interface{}, name string) boolRenameIndex(dst interface{}, oldName, newName string) error
}

常用的Migrator方法

创建表

m:=db.Migrator()
m.CreateTable(&User{})

是否存在表

//以结构体的方式查
m.HasTable(&User{})
//以表名的方式查
fmt.Println(m.HasTable("gva_users"))

删除表

	err = m.DropTable(&User{})if err != nil {fmt.Println(err)}err = m.DropTable("gva_users")if err != nil {fmt.Println(err)}if m.HasTable(&User{}) {m.DropTable(&User{})} else {m.CreateTable(&User{})}

重命名表

将gva_users表改为gva_users_two表

	m := db.Migrator()m.RenameTable(&User{}, "gva_users_two")

在这里插入图片描述
这个时候再通过原来的结构体查询就查不到了

	fmt.Println( m.HasTable(&User{}))//false

所以一般建议这样写

	type User struct {Name string}m := db.Migrator()type UserTwo struct {Name string}m.RenameTable(&User{},&UserTwo{})

更多的api

可以看到,这些api都是在type Migrator interface 这个结构体中,所以直接看该接口有哪些方法即可,更多的api使用直接翻阅官方文档迁移即可

http://www.lbrq.cn/news/2508139.html

相关文章:

  • 做设计应该看哪些网站江门seo推广公司
  • 烟台做网站的百度竞价和优化的区别
  • 附近哪里有建设seo 服务
  • php网站是什么数据库文件网站设计费用
  • 如何做中英版网站进入百度官网首页
  • 淘客网站怎么建设免费做网站怎么做网站吗
  • 网页游戏网站模压板百度应用商店app下载
  • 内容相同的 网站搜狗收录提交
  • wordpress做社区网站营业推广策划方案
  • 找项目网站兰州网站开发公司
  • 重庆网站推广服务seo排名工具有哪些
  • 海南建设网网站韶关seo
  • 企业品牌网站建设成都搜索优化排名公司
  • 龙岗网站建设 公司推广如何推销网站
  • 全国疫情最新消息地图seo排名优化怎样
  • 网站建设 提案 框架网络营销师报考条件
  • 专业做校园文化的网站企业推广平台有哪些
  • 新公司网站建设网站推广基本方法是
  • wordpress 企业网站 免费下载如何免费推广网站
  • 如何做英文系统下载网站郑州本地seo顾问
  • 网站建设开发报价明细整站seo排名
  • 武汉抖音seo推广网站关键词排名seo
  • 网站设置301重定向微信小程序开发公司
  • 浅析php网站建设的八大优势阿里数据
  • 关于建设政府门户网站的请示长沙seo网站优化
  • python 做企业网站优化排名 生客seo
  • 上海怎样建设网站零基础学电脑培训班
  • 上海网站建设费用多少性能优化大师
  • 要建设一个网站需要准备些什么北大青鸟软件开发培训学费多少
  • 注册公司上什么网站自动优化app
  • 13、select_points_object_model_3d解析
  • Linux之网络部分-应用层协议 HTTP
  • STM32启动流程
  • C++---初始化列表(initializer_list)
  • Android启动时间优化大全
  • 《谁在翻译机器的疼痛?》——故障诊断的认知鸿沟与产教破壁之战!