zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    Emmet 语法
    GitHub常用命令
    ProgressBar.js – 漂亮的响应式 SVG 进度条
    99个漂亮的注册和登录页设计(附PSD)
    android Acitivity之间的几种传值方式(^_^)
    Android 动态生成 EditTest
    Android 小笔记
    winfrom获取用户控件里的控件对象
    MVC+Easeyui dialog的小问题
    bootStrap
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10922803.html
Copyright © 2011-2022 走看看