博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gorm的坑很多,无限填坑中error pq: got 6 parameters but the statement requires 5
阅读量:2071 次
发布时间:2019-04-29

本文共 2231 字,大约阅读时间需要 7 分钟。

0.特殊情况

解决 sql肯定有问题,把sql.log(true)打开,一句句过

1.建表语句

type ExportOpt struct {    ProductId int    Name      string}ds.Gorm().Debug().AutoMigrate(&ExportOpt{})

2.执行原生sql

// Scantype Result struct {    Name string    Age  int}var result Resultdb.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)

3.事务

// 开始事务tx := db.Begin()// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')tx.Create(...)// ...// 发生错误时回滚事务tx.Rollback()// 或提交事务tx.Commit()//具体例子func CreateAnimals(db *gorm.DB) err {  tx := db.Begin()  // 注意,一旦你在一个事务中,使用tx作为数据库句柄  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {     tx.Rollback()     return err  }  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {     tx.Rollback()     return err  }  tx.Commit()  return nil}

4.sql.Raw

row := db.Table("users").Where("name = ?", "jinzhu").Select("name, age").Row() // (*sql.Row)row.Scan(&name, &age)rows, err := db.Model(&User{}).Where("name = ?", "jinzhu").Select("name, age, email").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() {    ...    rows.Scan(&name, &age, &email)    ...}// Raw SQLrows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows() // (*sql.Rows, error)defer rows.Close()for rows.Next() {    ...    rows.Scan(&name, &age, &email)    ...}

5.showSql 打印sql

// 启用Logger,显示详细日志db.LogMode(true)

6.添加模型model

// 基本模型的定义type Model struct {  ID        uint `gorm:"primary_key"`  CreatedAt time.Time  UpdatedAt time.Time  DeletedAt *time.Time}// 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`type User struct {  gorm.Model  Name string}

7.关联查询

// User 包含一个 CreditCard, UserID 为外键type User struct {    gorm.Model    CreditCard   CreditCard}type CreditCard struct {    gorm.Model    UserID   uint    Number   string}var card CreditCarddb.Model(&user).Related(&card, "CreditCard") SELECT * FROM credit_cards WHERE user_id = 123; // 123 is user's primary key// CreditCard是user的字段名称,这意味着获得user的CreditCard关系并将其填充到变量// 如果字段名与变量的类型名相同,如上例所示,可以省略,如:db.Model(&user).Related(&card)

8.指定table查询

type Result struct {    Name string    Age  int}var result Resultdb.Table("users").Select("name, age").Where("name = ?", 3).Scan(&result)// Raw SQLdb.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)

 

转载地址:http://cypmf.baihongyu.com/

你可能感兴趣的文章
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
详细介绍Oracle sqlplus命令
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>