操作的四個方法 Read / Insert / Update / Delete
mysql數據庫,設計表的結構
創建名爲Person的數據庫,創建user表,字段設計如下
mysql> create database Person CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> use Person
mysql> CREATE TABLE user(
id int not null auto_increment,
Name char(50),
Pwd char(50),
Email char(50),
Sex char(50),
Phone char(50),
primary key (id)
);
models 主要是負責數據庫處理
# models目錄下面 user.go
package models
import (
"github.com/astaxie/beego/orm"
)
// 用戶信息
// 默認情況對應數據庫的表名爲:user
type User struct {
Id int64
Name string
Pwd string
Email string
Sex string
Phone string
}
func init() {
// 需要在init中註冊定義的model
// orm.RegisterModel(new(User), new(Post), new(Profile), new(Tag))
orm.RegisterModel(new(User))
}
main.go 負責在運行時連接數據庫根據模型創建數據庫表
package main
import (
"mysite/models"
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
mysqlhost := beego.AppConfig.String("mysqlhost")
mysqlport := beego.AppConfig.String("mysqlport")
mysqluser := beego.AppConfig.String("mysqluser")
mysqlpass := beego.AppConfig.String("mysqlpass")
mysqldb := beego.AppConfig.String("mysqldb")
//註冊mysql Driver
orm.RegisterDriver("mysql", orm.DRMySQL)
//註冊數據庫直接連接
// orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
//用戶名:密碼@tcp(url地址)/數據庫 ,名字對應app.conf配置數據庫信息
conn := mysqluser + ":" + mysqlpass + "@tcp(" + mysqlhost + ":" + mysqlport + ")/" + mysqldb + "?charset=utf8"
//註冊數據庫連接
orm.RegisterDataBase("default", "mysql", conn)
fmt.Printf("數據庫連接成功!%s\n", conn)
}
func main() {
// 插入數據
o := orm.NewOrm()
u := models.User{Name:"Victor", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
id, err := o.Insert(&u)
fmt.Printf("ID: %d, ERR: %v\n", id, err)
beego.Run()
orm.Debug= true
beego.Run()
}
Insert
func main() {
orm.Debug= true
// 插入數據
o := orm.NewOrm()
u := models.User{Name:"Victor", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
id, err := o.Insert(&u)
fmt.Printf("ID: %d, ERR: %v\n", id, err)
beego.Run()
}
Read
func main() {
orm.Debug= true
o := orm.NewOrm()
// 讀取數據
user := models.User{Id: 4}
err := o.Read(&user)
if err != nil {
fmt.Printf("ERR: %v\n", err)
}else {
fmt.Println(user.Id, user.Name, user.Email )
}
beego.Run()
}
ReadOrCreate
嘗試從數據庫讀取,不存在的話就創建一個
默認必須傳入一個參數作爲條件字段,同時也支持多個參數多個條件字段
func main() {
orm.Debug= true
o := orm.NewOrm()
// 嘗試從數據庫讀取,不存在的話就創建一個
user := models.User{Name:"AI", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"}
// 三個返回參數依次爲:是否新創建的,對象 Id 值,錯誤
if created, id, err := o.ReadOrCreate(&user, "Name"); err == nil {
if created {
fmt.Println("New Insert an object. Id:", id)
} else {
fmt.Println("Get an object. Id:", id)
}
}
beego.Run()
}
InsertMulti
同時插入多個對象
類似sql語句
insert into table (name, age) values(“slene”, 28),(“astaxie”, 30),(“unknown”, 20)
func main() {
orm.Debug= true
o := orm.NewOrm()
// 同時插入多個對象
users := []models.User{
{Name:"qwe", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"},
{Name:"asd", Pwd:"123qwee", Email:"[email protected]", Sex:"boy", Phone:"123123"},
}
// 第一個參數 bulk 爲並列插入的數量,bulk 爲 1 時,將會順序插入 slice 中的數據
successNums, err := o.InsertMulti(100, users)
fmt.Printf("successNums: %d, ERR: %v\n", successNums, err)
beego.Run()
}
Update
第一個返回值爲影響的行數
func main() {
orm.Debug= true
o := orm.NewOrm()
// Update 默認更新所有的字段,可以更新指定的字段
user := models.User{Id: 4}
user.Name = "my"
num, err := o.Update(&user)
// 只更新 Name
// o.Update(&user, "Name")
// 指定多個字段
// o.Update(&user, "Field1", "Field2", ...)
fmt.Printf("successNums: %d, ERR: %v\n", num, err)
beego.Run()
}
Delete
第一個返回值爲影響的行數
func main() {
orm.Debug= true
o := orm.NewOrm()
// Delete
if num, err := o.Delete(&models.User{Id: 1}); err == nil {
fmt.Println(num)
}
beego.Run()
}
---------------------
作者:斷了的軍刀
來源:CSDN
原文:https://blog.csdn.net/u011327801/article/details/90180942
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!