• 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/

  • 相关阅读:
    Luogu P4246 [SHOI2008]堵塞的交通(线段树+模拟)
    Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
    Luogu P2042 [NOI2005]维护数列(平衡树)
    Luogu P1052 过河(dp)
    Luogu P1041 传染病控制(搜索)
    Luogu P2717 寒假作业(平衡树)
    Luogu P2822 组合数问题(前缀和)
    Luogu P2827 蚯蚓(模拟)
    随机图片测试
    Luogu P2458 [SDOI2006]保安站岗(树形dp)
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10922803.html
Copyright © 2020-2023  润新知