首页 > 数据库 >从数据库中随机选取数据(基于golang,xorm)

从数据库中随机选取数据(基于golang,xorm)

时间:2024-03-08 10:33:05浏览次数:34  
标签:engine 10 users err nil 数据库 golang User xorm

一、 从MySQL数据库中随机选取数据,可以使用 SQL 的 ORDER BY RAND() 语句来实现。具体步骤如下:

  1. 定义一个结构体用于存储数据
type User struct {
    Id   int64
    Name string
    Age  int
}
  1. 建立与数据库的连接,并获取一个 Engine 实例
engine, err := xorm.NewEngine("mysql", "root:password@/database?charset=utf8")
if err != nil {
    // 处理错误
}
  1. 使用 Desc() 方法设置随机排序,然后使用 Limit() 方法限制返回的数据条数
var users []User
err = engine.Desc("rand()").Limit(10, 0).Find(&users)
if err != nil {
    // 处理错误
}

上面的代码会从数据库中随机选取 10 条 User 记录,并存储在 users 切片中。

完整代码示例:

 1 package main
 2 
 3 import (
 4     "fmt"
 5 
 6     "github.com/go-xorm/xorm"
 7     _ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动
 8 )
 9 
10 type User struct {
11     Id   int64
12     Name string
13     Age  int
14 }
15 
16 func main() {
17     engine, err := xorm.NewEngine("mysql", "root:password@/database?charset=utf8")
18     if err != nil {
19         fmt.Println(err)
20         return
21     }
22 
23     var users []User
24     err = engine.Desc("rand()").Limit(10, 0).Find(&users)
25     if err != nil {
26         fmt.Println(err)
27         return
28     }
29 
30     for _, user := range users {
31         fmt.Printf("Id: %d, Name: %s, Age: %d\n", user.Id, user.Name, user.Age)
32     }
33 }
View Code

二、在 PostgreSQL 中也可以使用类似的方法从数据库中随机选取数据。PostgreSQL 提供了 random() 函数来生成随机数,可以结合 ORDER BY 子句实现随机排序。

  1. 定义一个结构体用于存储数据
type User struct {
    Id   int64
    Name string
    Age  int
}
  1. 建立与 PostgreSQL 数据库的连接,并获取一个 Engine 实例
engine, err := xorm.NewEngine("postgres", "user=postgres password=mypassword dbname=mydb sslmode=disable")
if err != nil {
    // 处理错误
}
  1. 使用 Desc() 方法设置随机排序,然后使用 Limit() 方法限制返回的数据条数
var users []User
err = engine.Desc("random()").Limit(10, 0).Find(&users)
if err != nil {
    // 处理错误
}

上面的代码会从 PostgreSQL 数据库中随机选取 10 条 User 记录,并存储在 users 切片中。

完整代码示例:

 1 package main
 2 
 3 import (
 4     "fmt"
 5 
 6     "github.com/go-xorm/xorm"
 7     _ "github.com/lib/pq" // 导入 PostgreSQL 驱动
 8 )
 9 
10 type User struct {
11     Id   int64
12     Name string
13     Age  int
14 }
15 
16 func main() {
17     engine, err := xorm.NewEngine("postgres", "user=postgres password=mypassword dbname=mydb sslmode=disable")
18     if err != nil {
19         fmt.Println(err)
20         return
21     }
22 
23     var users []User
24     err = engine.Desc("random()").Limit(10, 0).Find(&users)
25     if err != nil {
26         fmt.Println(err)
27         return
28     }
29 
30     for _, user := range users {
31         fmt.Printf("Id: %d, Name: %s, Age: %d\n", user.Id, user.Name, user.Age)
32     }
33 }
View Code

三、Microsoft SQL Server

在 SQL Server 中,可以使用 NEWID() 函数生成一个唯一的 GUID 值,然后根据这个 GUID 值进行排序,从而实现随机排序的效果。

var users []User
err = engine.Desc("NEWID()").Limit(10, 0).Find(&users)
if err != nil {
    // 处理错误
}

四、Oracle

在 Oracle 中,可以使用 DBMS_RANDOM.RANDOM 函数生成一个随机数,然后根据这个随机数进行排序,从而实现随机排序的效果。

var users []User
err = engine.Desc("DBMS_RANDOM.RANDOM").Limit(10, 0).Find(&users)
if err != nil {
    // 处理错误
}

需要注意的是,在 Oracle 中,DBMS_RANDOM.RANDOM 函数需要在查询语句中使用,而不能直接在 Go 代码中使用。因此,需要先构建一个原生的 SQL 查询语句,然后使用 engine.SQL() 方法执行该查询语句。

sql := "SELECT * FROM users ORDER BY DBMS_RANDOM.RANDOM FETCH FIRST 10 ROWS ONLY"
var users []User
err = engine.SQL(sql).Find(&users)
if err != nil {
    // 处理错误
}

在上面的示例代码中,FETCH FIRST 10 ROWS ONLY 用于限制返回的记录数量为 10 条。

  总的来说,不同的数据库管理系统提供了不同的函数或方法来生成随机数或 GUID,可以结合 ORDER BY 子句实现随机排序,从而随机选取数据。但是,与使用索引进行排序相比,使用随机函数进行排序
的效率通常较低,尤其是在数据量较大的情况下。因此,如果需要获取大量随机数据,建议使用其他方式,例如在应用程序层面实现随机算法。

标签:engine,10,users,err,nil,数据库,golang,User,xorm
From: https://www.cnblogs.com/dajianshi/p/18060457

相关文章

  • golang项目用k8s部署的流程
    摘要:本文将详细介绍如何使用Kubernetes(K8S)部署一套Golang微服务项目,并给出了完整的实施步骤和相应代码示例,旨在指导刚入行的开发者完成这一任务。一、整体流程下面是使用K8S部署Golang微服务项目的整体流程,我们将在接下来的内容中详细介绍每一步骤。1.准备容器镜像2.创建K8S集......
  • MyBatis Java 和 数据库 数据类型对应表
    类型处理器(typeHandlers)MyBatis在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成Java类型。下表描述了一些默认的类型处理器。提示 从3.4.5开始,MyBatis默认支持JSR-310(日期和时间API)。类型处......
  • 新建数据库顺序思路
      表之间存在三种关系:多对一、一对一、多对多,那如何确定两张表之间的关系呢?按照下述步骤操作即可左表<------------------------------->右表#步骤一:先分析#分析1、先站在左表的角度是否左表的多条记录可以对应右表的一条记录#分析2、再站在右表的角度去找是否右表......
  • 万字长文讲解Golang pprof 的使用
    往期好文推荐⭐️⭐️⭐️:#golangpprof监控系列(1)——gotrace统计原理与使用#golangpprof监控系列(2)——memory,block,mutex使用#golangpprof监控系列(3)——memory,block,mutex统计原理#golangpprof监控系列(4)——goroutinethread统计原理#golangpprof......
  • 实体类与数据库的直接交互问题,DTO,AutoMapper的使用
    实体类、DTO与数据库交互的最佳实践实体类与数据库的直接交互问题在软件开发中,实体类通常被设计为反映业务域的数据模型。这些实体类可能包含以下元素:特性(Attributes):用于定义实体属性的额外信息,比如数据验证规则或ORM(对象关系映射)框架的映射信息。继承关系:实体之间可能存......
  • 关于安卓开发远程连接mysql数据库2
    安卓开发远程连接数据库方式2:通过发送请求到web中间层实现对数据库的增删改查操作。第一步需要给安卓程序添加上网络权限,在安卓项目中的配置文件中加上代码<uses-permission android:name="android.permission.INTERNET"/>语句用于获得访问网络的权限第二步添加Retrofit+GSON......
  • Golang 执行shell命令
    Golang执行shell命令参考:golang执行shell命令大全https://saucer-man.com/backend_development/571.html1.执行命令并获得输出结果CombinedOutput()  返回standardoutputandstandarderrorfuncmain(){cmd:=exec.Command("ls","-lah")out,err:=......
  • 数据库第1章 绪论
    数据库知识总结第1章绪论课本知识:1.数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。2.数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成。3.数据库领域中主要的逻辑数据模型:层次模型、网状......
  • golang 时间比对时,time.Now()与time.Parse()的使用注意
    在11:28时执行以下代码nowTime:=time.Now()t1,err:=time.Parse("2006-01-0215:04","2024-03-0708:00:00")result:=nowTime.Before(t1)本以为result应该是false,结果竟然是true。  调试下看看两者的区别发现:time.Parse()是UTC时间,无时区信息,如:time.Time(2024-0......
  • Python中怎么使用Spark的spark.read.format()函数读取MySQL数据库中的数据
    1.准备工作:安装pyspark库(pipinstallpyspark)2.代码:#导入模块frompyspark.sqlimportSparkSession#创建Spark会话对象spark=SparkSession.builder\.appName("ReadMySQL")\.getOrCreate()#或者写成一行spark=SparkSession.builder.appName("ReadMySQL&qu......