xorm表结构操作实例

获取数据库信息

package main

import (
   "fmt"
   _ "github.com/go-sql-driver/mysql"
   "github.com/go-xorm/xorm"
   "log"
)

var engine *xorm.Engine

type User struct {
   ID int `xorm:"id"`
   Name string `xorm:"name"`
}



func main() {
   var err error
   engine, err = xorm.NewEngine("mysql", "root:123456@/test")
   if err != nil {
      log.Fatal(err)
      return
   }



   //xorm支持获取表结构信息,通过调用engine.DBMetas()可以获取到数据库中所有的表,字段,索引的信息。
   tbs, err := engine.DBMetas()
   if err != nil {
      log.Fatal(err)
      return
   }
   for i, tb := range tbs {
      fmt.Println("index:",  i, "tbName", tb.Name)
   }
  
  /*输出
  index: 0 tbName prefix_user
  index: 1 tbName student
*/
	

  //TableInfo()根据传入的结构体指针及其对应的Tag,提取出模型对应的表结构信息。
  //这里不是数据库当前的表结构信息,而是我们通过struct建模时希望数据库的表的结构信息
	//比如user表的数据库当前有三个属性,但是只会打印出两个属性
	tableInfo:=engine.TableInfo(User{})
	columns:= tableInfo.Columns()

	for  i,column  := range  columns{
		fmt.Println("index:",i," columnName:",column.Name)
	}
  /*輸出:
index: 0  columnName: id
index: 1  columnName: name*/
}

表操作

  • 创建表使用engine.CreateTables(),参数为一个或多个空的对应Struct的指针。

    package main
    
    import (
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    )
    
    var engine *xorm.Engine
    
    type User1 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    	
    	//创建表使用engine.CreateTables(),参数为一个或多个空的对应Struct的指针。
    	err = engine.CreateTables(User1{})
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    }
    
  • IsTableEmpty()判断表是否为空,参数和CreateTables相同

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    )
    
    var engine *xorm.Engine
    
    type User1 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	//IsTableEmpty()判断表是否为空,参数和CreateTables相同
    	re,err := engine.IsTableEmpty(User1{})
    	if err!=nil {
    		log.Fatal(err)
    		return
    	}
    	fmt.Println(re)
    }
    
  • IsTableExist()判断表是否存在,参数和CreateTables相同

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    )
    
    var engine *xorm.Engine
    
    type User1 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    type User2 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	//IsTableExist()判断表是否存在,参数和CreateTables相同
    	res,err := engine.IsTableExist(User1{})
    	if err!=nil {
    		log.Fatal(err)
    		return
    	}
    	fmt.Println(res)
    	//user1表之前建立过,所以输出为true
    
    	res,err = engine.IsTableExist(User2{})
    	if err!=nil {
    		log.Fatal(err)
    		return
    	}
    	fmt.Println(res)
    	//之前没有建立过user2表中,所以输出为false
    }
    
  • 删除表使用engine.DropTables(),参数为一个或多个空的对应Struct的指针或者表的名字。

    package main
    
    import (
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    )
    
    var engine *xorm.Engine
    
    type User1 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    type User2 struct {
    	ID int `xorm:"id"`
    	Name string `xorm:"name"`
    }
    
    
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	// 如果为string传入,则只删除对应的表,如果传入的为Struct,则删除表的同时还会删除对应的索引。
    	err = engine.DropTables(User1{})
    	if err!=nil {
    		log.Fatal(err)
    		return
    	}
    }
    

参考:http://gobook.io/read/github.com/go-xorm/manual-zh-CN/

原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10922803.html