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 } }