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

目录
  • 1. 连接数据库
    • 1.1 MySQL
    • 1.2 PostgreSQL
    • 1.3 Sqlite3
    • 1.4 不支持的数据库
  • 2. 迁移
    • 2.1. 自动迁移
    • 2.2. 检查表是否存在
    • 2.3. 创建表
    • 2.4. 删除表
    • 2.5. 修改列
    • 2.6. 删除列
    • 2.7. 添加外键
    • 2.8. 索引

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")

以上就是golang gorm框架数据库操作示例的详细内容,更多关于golang gorm框架数据库操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • golang gorm 操作mysql及gorm基本用法

    golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍 下载gorm: go get -u github.com/jinzhu/gorm 在项目中引入gorm: import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) 定义db连接信息 func DbConn(MyUser, Password, Host, Db stri

  • golang gorm的Callbacks事务回滚对象操作示例

    目录 1. Callbacks 1.1. 创建对象 1.2. 更新对象 1.3. 删除对象 1.4. 查询对象 1.5. 回调示例 1. Callbacks 您可以将回调方法定义为模型结构的指针,在创建,更新,查询,删除时将被调用,如果任何回调返回错误,gorm将停止未来操作并回滚所有更改. 1.1. 创建对象 创建过程中可用的回调 // begin transaction 开始事物 BeforeSave BeforeCreate // save before associations 保存前关

  • golang gorm的预加载及软删硬删的数据操作示例

    目录 1. orm读写数据 1. 创建 1.1. 创建记录 1.2. 默认值 1.3. 在Callbacks中设置主键 1.4. 扩展创建选项 2. 查询 2.1. Where查询条件 (简单SQL) 2.2. Where查询条件 (Struct & Map) 2.3. Not条件查询 2.4. 带内联条件的查询 2.5. Or条件查询 2.6. 查询链 2.7. 扩展查询选项 2.8. FirstOrInit 2.9. Attrs 2.10. Assign 2.11. FirstOrCreat

  • golang gorm的关系关联实现示例

    目录 1. 关联 1.1. 属于 1.2. 包含一个 1.3. 包含多个 1.4. 多对多 1.5. 多种包含 1.6. 关联模式 1. 关联 1.1. 属于 // `User`属于`Profile`, `ProfileID`为外键 type User struct { gorm.Model Profile Profile ProfileID int } type Profile struct { gorm.Model Name string } db.Model(&user).Related(

  • golang gorm开发架构及写插件示例

    目录 1. 开发 1.1. 架构 1.2. 写插件 1.2.1. 注册新的callback 1.2.2. 删除现有的callback 1.2.3. 替换现有的callback 1.2.4. 注册callback顺序 1.2.5. 预定义回调 1. 开发 1.1. 架构 Gorm使用可链接的API,*gorm.DB是链的桥梁,对于每个链API,它将创建一个新的关系. db, err := gorm.Open("postgres", "user=gorm dbname=gorm

  • golang gorm错误处理事务以及日志用法示例

    目录 1. 高级用法 1.1. 错误处理 1.2. 事物 1.2.1. 一个具体的例子 1.3. SQL构建 1.3.1. 执行原生SQL 1.3.2. sql.Row & sql.Rows 1.3.3. 迭代中使用sql.Rows的Scan 1.4. 通用数据库接口sql.DB 1.4.1. 连接池 1.5. 复合主键 1.6. 日志 1.6.1. 自定义日志 1. 高级用法 1.1. 错误处理 执行任何操作后,如果发生任何错误,GORM将其设置为*DB的Error字段 if err := d

  • golang gorm模型结构体的定义示例

    目录 1. 模型 1.1. 模型定义 2. 约定 2.1. gorm.Model 结构体 2.2. 表名是结构体名称的复数形式 2.3. 更改默认表名 2.4. 列名是字段名的蛇形小写 2.5. 字段ID为主键 2.6. 字段CreatedAt用于存储记录的创建时间 2.7. 字段UpdatedAt用于存储记录的修改时间 2.8. 字段DeletedAt用于存储记录的删除时间,如果字段存在 1. 模型 1.1. 模型定义 type User struct { gorm.Model Birthda

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

    目录 1. 连接数据库 1.1 MySQL 1.2 PostgreSQL 1.3 Sqlite3 1.4 不支持的数据库 2. 迁移 2.1. 自动迁移 2.2. 检查表是否存在 2.3. 创建表 2.4. 删除表 2.5. 修改列 2.6. 删除列 2.7. 添加外键 2.8. 索引 1. 连接数据库 要连接到数据库首先要导入驱动程序.例如 import _ "github.com/go-sql-driver/mysql" 为了方便记住导入路径,GORM包装了一些驱动. import

  • yii框架数据库关联查询操作示例

    本文实例讲述了yii框架数据库关联查询操作.分享给大家供大家参考,具体如下: <?php namespace app\controllers; use yii\web\Controller; use app\models\Customer; class CustomerController extends Controller{ //根据顾客名字查询出所有的订单信息 public function actionIndex(){ $customer = Customer::find()->whe

  • laravel框架数据库配置及操作数据库示例

    本文实例讲述了laravel框架数据库配置及操作数据库.分享给大家供大家参考,具体如下: laravel 数据库配置 数据库配置文件为项目根目录下的config/database.php //默认数据库为mysql 'default' => env('DB_CONNECTION', 'mysql'), 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('

  • golang Gorm框架讲解

    目录 1.gorm介绍 1.1介绍 1.2安装 2.使用 2.1创建表 2.2.添加数据 2.3.查询数据 2.4更新数据 2.5删除数据 2.6执行原生sql 3.一对一 3.1创建表 3.2多态关联 3.3外键约束 4.一对多 5.多对多 6.获取多表数据 1.gorm介绍 1.1介绍 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Pr

  • tp5.1框架数据库子查询操作实例分析

    本文实例讲述了tp5.1框架数据库子查询操作.分享给大家供大家参考,具体如下: 首先构造子查询SQL,可以使用下面三种的方式来构建子查询. 使用fetchSql方法 fetchSql方法表示不进行查询而只是返回构建的SQL语句,并且不仅仅支持select,而是支持所有的CURD查询. $subQuery = Db::table('think_user') ->field('id,name') ->where('id', '>', 10) ->fetchSql(true) ->

  • Yii框架实现对数据库的CURD操作示例

    本文实例讲述了Yii框架实现对数据库的CURD操作.分享给大家供大家参考,具体如下: 首先要对数据库进行操作,需要创建一个和数据库表名相同的model,放在models文件夹下 user.php <?php namespace app\models; use yii\db\ActiveRecord; //继承ActiveRecord实现CURD操作 class user extends ActiveRecord { } 后面的代码中命名空间都已经省略 namespace app\controll

  • Django框架使用mysql视图操作示例

    本文实例讲述了Django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.Mysql视图的创建 MySQL中,在两个或者以上的基本表上创建视图,例如:在StudentOrm表和InfoOrm表上,创建mysql_view_test_orm视图 1.首先,创建两张表 from django.db import models # Create your models here. class StudentOrm(models.Model): name = models.CharFi

  • Yii框架连表查询操作示例

    本文实例讲述了Yii框架连表查询操作.分享给大家供大家参考,具体如下: Join //表连接 //查询出学生.班级.校区.记录表的所有数据 $data=Jf_record::find() ->join('join','jf_stu','jf_record.sid=jf_stu.sid') ->join('join','jf_class','jf_stu.cid=jf_class.cid') ->join('join','jf_school','jf_class.xid=jf_school

随机推荐