beego ORM配置及使用实例

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/54973203,建议读者阅读原文,确保获得完整的信息

1、ORM配置

package main

import (
    "fmt"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"
)

type User struct {
    Id          int
    Age         int16
    Name        string
}

func init() {
    orm.RegisterDriver("mysql", orm.DRMySQL)

    orm.RegisterModel(new(User))

    orm.RegisterDataBase("default", "mysql", "root:root@tcp(123.123.123.123:3306)/test?charset=utf8")
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2、操作实例

以下操作的数据库MySQL,数据表结构为:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `enabled` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

2.1、数据插入

插入一条用户记录,用户名为wood。

func insert(){

    orm.Debug = true;
    o := orm.NewOrm()
    o.Using("default") // 默认使用 default,你可以指定为其他数据库

    user := User{Name: "wood"}

    fmt.Println(o.Insert(&user))
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果

[ORM]2017/02/14 17:46:20  -[Queries/default] - [  OK /     db.Exec /    33.6ms] - [INSERT INTO `user` (`age`, `name`) VALUES (?, ?)] - `0`, `wood`
10 <nil>
 
 
  • 1
  • 2
  • 1
  • 2

2.2、数据删除

删除Id等于9的记录,其中Id为主键。

func delete(){

    orm.Debug = true;
    o := orm.NewOrm()
    o.Using("default") // 默认使用 default,你可以指定为其他数据库

    user := User{Id : 9,Name: "koome"}

    fmt.Println(o.Delete(&user))
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果

[ORM]2017/02/14 17:48:33  -[Queries/default] - [  OK /     db.Exec /    37.9ms] - [DELETE FROM `user` WHERE `id` = ?] - `9`
1 <nil>
 
 
  • 1
  • 2
  • 1
  • 2

2.3、数据更新

更新Id等于8的用户名为koome_new。

func update(){

    orm.Debug = true;
    o := orm.NewOrm()
    o.Using("default") // 默认使用 default,你可以指定为其他数据库

    user := User{Id : 8,Name: "koome_new"}

    fmt.Println(o.Update(&user))
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果

[ORM]2017/02/14 17:49:32  -[Queries/default] - [  OK /     db.Exec /    31.6ms] - [UPDATE `user` SET `age` = ?, `name` = ? WHERE `id` = ?] - `0`, `koome_new`, `8`
1 <nil>
 
 
  • 1
  • 2
  • 1
  • 2

2.4、数据查询

执行查询SELECT age, id, name FROM user WHERE enabled = 1

func query(){

    var j,i int64

    orm.Debug = true;
    o := orm.NewOrm()
    o.Using("default") // 默认使用 default,你可以指定为其他数据库

    var users [] User
    num,err := o.Raw("SELECT age, id, name FROM user WHERE enabled = ?",1).QueryRows(&users)
    fmt.Println(users)

    if err == nil {
        fmt.Println("user nums: ", num)
    }

    i = num
    for j = 0; j < i; j++ {
        fmt.Printf("Element[%d] = %d\n", j, users[j].Name )
    }
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

运行结果

[ORM]2017/02/14 17:51:02  -[Queries/default] - [  OK /    db.Query /    18.5ms] - [SELECT age, id, name FROM user WHERE enabled = ?] - `1`
[{1 30 slene} {2 0 new} {4 0 jack} {7 0 loong} {8 0 koome_new} {10 0 wood}]
user nums:  6
Element[0] = %!d(string=slene)
Element[1] = %!d(string=new)
Element[2] = %!d(string=jack)
Element[3] = %!d(string=loong)
Element[4] = %!d(string=koome_new)
Element[5] = %!d(string=wood)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

当前数据库数据 
这里写图片描述

3、Q&A

1. must have one register DataBase alias named default 
2. sql: expected 3 destination arguments in Scan, not 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Django ORM 使用实例: 假设我们有一个简单的博客应用,其中包含两个模型:`Post` 和 `Comment`,`Post` 模型表示博客文章,`Comment` 模型表示博客文章下的评论。 首先,我们需要定义模型,可以在 `models.py` 文件中定义: ```python from django.db import models class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) author = models.CharField(max_length=100) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) ``` 这里我们使用 `CharField`、`TextField` 和 `DateTimeField` 等字段类型来定义模型的字段。另外,`Comment` 模型使用了 `ForeignKey` 字段来关联 `Post` 模型。 接下来,我们可以使用 Django ORM 来操作这两个模型。例如,我们可以创建一篇博客文章: ```python from myapp.models import Post post = Post(title='Hello World', content='This is my first blog post.') post.save() ``` 这里我们首先从 `models` 模块导入 `Post` 模型,然后创建一个 `Post` 实例,设置标题和内容,并调用 `save()` 方法保存到数据库中。 我们也可以查询博客文章: ```python posts = Post.objects.all() for post in posts: print(post.title, post.content, post.created_at) ``` 这里我们使用 `objects` 属性获取 `Post` 模型的所有记录,并通过 `for` 循环遍历每个记录,并输出标题、内容和创建时间。 如果我们要查询某篇博客文章的评论,可以使用 `Comment` 模型的 `filter()` 方法: ```python from myapp.models import Comment comments = Comment.objects.filter(post_id=post.id) for comment in comments: print(comment.author, comment.content, comment.created_at) ``` 这里我们使用 `filter()` 方法来查询 `post_id` 等于当前博客文章的评论,并输出每个评论的作者、内容和创建时间。 以上就是一个简单的 Django ORM 使用实例。当然,在实际开发中,我们还可以使用更多的 ORM 方法来操作数据库,例如 `get()`、`create()`、`update()`、`delete()` 等方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值