Rust个人学习之Rust操作Mysql数据库

Rust 使用 mysql 的 crate 进行 mysql 的连接操作,特进行记录。

写在前面

如果想使用 mysql 需要在 CargoToml 文件中增加 mysql 的引用

[dependencies]
chrono = "0.4"
mysql = "*"

连接数据库

数据库信息如下:

字段数据
数据库地址Dbpath
数据库端口3306
数据库用户Dbuser
数据库密码Pwd
数据库名称Dbname

如果采用命令行登录,会按照如下方式进行访问:

mysql -h Dbpath -u Dbuser -p Pwd

在 Rust 中想建立一个数据库连接有以下几个步骤:
1、 初始化一个数据库的参数对象Opts
常见的处理方式有两种:
方式一:通过 url 的方式进行建立

// 初始化一个数据库的url,包含了数据库的关键信息
let url = "mysql://Dbuser:Pwd@Dbpath:3306/Dbname";
// 通过from_url 生成数据库参数对象
let opts = Opts::from_url(url).unwrap();

方式二:通过传参的方式进行建立

let opts = OptsBuilder::new()  
.ip_or_hostname(Some("Dbpath"))  
.user(Some("Dbuser"))  
.pass(Some("Pwd"))  
.db_name(Some("Dbname"))  
.tcp_port(3306);

2、通过数据库的参数建立一个数据库连接池

// 通过数据库参数,建立一个数据库连接池Pool
let pool = match Pool::new(opts) {
	Ok(p) => p,
	Err(e) => {
		eprintln!("Error {}", e);
		std::process::exit(1);
	}
};

// 在连接池中建立一个新的连接
let mut conn = pool.get_conn().unwrap();

可以建立一个全局的函数生成 pool,不建议函数返回连接,因为连接池在生命周期结束后会自动清除,如果是返回连接的话就要考虑连接回收的逻辑。

数据插入

数据插入可以通过 exec_drop 的方式进行执行,以 sql 语句:insert into table (id, data) values (id, data);

conn.exec_drop(
            "insert into table (id, data) values (:id, :data)",
                params! {
                    "id" => id,
                    "data" => data,
                }          
        ).unwrap();
    }

其中,params 是参数的宏定义,将 id、data 的值传入到 sql 语句的字段中。

数据查询

数据处理常用的方法有以下几种1

  • 经常使用的时间处理库:chrono
  • 流式查询使用:query_iter
  • 输出到 Vec 使用:query
  • 映射到结构体使用:query_map
  • 获取单条数据使用:query_first
  • 命名参数查询使用:exec_first
    比如查询多条数据并映射到结构体,可以使用 query_map 进行查询
let res = conn.query_map(
            "select id, data from Dbname;",
            |(id, data)| Struct {
                id: id,
                data: data,
            },).expect("query failed.");

上述代码执行完成后,res 为 Vec ,query_map会将查询内容封装成 Struct 并插入到一个 Vec 中。

查询单条数据并映射到结构体中,可以使用query_first进行查询

let res = conn.exec_first(
            "SELECT id, data from Dbname WHERE id = : queryid;", 
            params! {
                "queryid" => id as u8
            },)
            .map(|row| {row.map(|(id, data)| Struct {
                id: id,
                Data: data,
            })},
                );

返回值 res 类型是 Result<Option, Err>

数据更新

数据更新的方式与插入一致,如下:

let stmt = conn.prep("UPDATE Dbname SET data = : data WHERE id = : queryid").unwrap();
        let res = conn.exec_drop(&stmt, params! {
            "data" => data,
            "queryid" => id            
        }).unwrap();

数据清除

删除功能暂未用到,所以没有用例,不过具体使用方式与更新是一致的。

引用资料


  1. 1 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/589414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

06.Git远程仓库

Git远程仓库 #仓库种类&#xff0c;举例说明 github gitlab gitee #以这个仓库为例子操作登录码云 https://gitee.com/projects/new 创建仓库 选择ssh方式 需要配置ssh公钥 在系统上获取公钥输入命令&#xff1a;ssh-keygen 查看文件&#xff0c;复制公钥信息内…

【画图】读取无人机IMU数据并打印成log用matlab分析

一、修改IMU频率 原来的imu没有加速度信息&#xff0c;查看加速度信息的指令为&#xff1a; rostopic echo /mavros/imu/data 修改imu频率&#xff0c;分别修改的是 原始IMU数据话题 /mavros/imu/data_raw。飞控计算过后的IMU数据 /mavros/imu/data rosrun mavros mavcmd l…

Uniapp好看登录注册页面

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

【Linux-点灯烧录-SD卡/USB烧写】

目录 1. 烧写方式2. 烧写之代码编译2.1 led.s->led.o2.2 led.o->led.elf2.3 led.elf->led.bin2.4 反汇编&#xff1a;led.elf->led.dis 3. 烧写之烧录到SD卡上&#xff1a;3.1 开启烧录软件权限&#xff1a;3.2 确定SD卡的格式&#xff1a;FAT323.3 烧录到SD卡上3.…

makefile中wildcard函数和patsubst用法

makefile中函数用法 makefile中函数的调用语法&#xff1a; $(<function> <arguments>) 或 ${<function> <arguments>}函数调用以$开头用{}或者()将函数名以及参数包含起来函数名和第一个参数之间以空格分隔参数之间使用逗号分隔 wildcard函数 wil…

python判断大图中包含小图并输出位置总结

python判断大图中包含小图并输出位置总结 没啥可说的&#xff0c;项目遇到了就直接上代码&#xff0c;可以减轻劳动力&#xff0c;花最少得时间实现应用功能。 import cv2 # 读取大图片和小图片的路径 img_big cv2.imread(big_image.png) img_small cv2.imread(small_image…

VScode+ubuntu配置ROS开发环境

VScodeubuntu配置ROS开发环境 写在前面 在vscode中先安装几个插件&#xff1a;中文语言包、Python插件、C插件、CMake插件、vscode-icons、ROS插件、Visual Studio IntelliCode、URDF、Markdown All in One 一、工作空间是什么 在ROS机器人开发中&#xff0c;我们针对机器人…

ue引擎游戏开发笔记(27)——解决角色移动及转动存在卡顿掉帧小技巧

1.需求分析&#xff1a; 随之游戏越来越大&#xff0c;难免出现部分时候移动出现卡顿&#xff0c;能否进行一定优化。 2.操作实现&#xff1a; 1.思路&#xff1a;采取捕获最后deltaseconds来逐帧进行旋转或移动&#xff0c;使动作显得不那么卡顿。 .2.首先在引擎中建立映射&a…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

24.5.2数据结构|顺序表实现

主要是记笔记&#xff0c;留着以后复习回来看的&#xff0c;有些内容解释的并不清晰。也就稍微可以借鉴借鉴。 一、如何定义结构&#xff1f; 应该有的部分用来约束的部分 二、看书搞清楚顺序表实现流程 1、准备工作&#xff1a;如何定义结构体&#xff1f;SeqList&#xf…

Acrobat Pro DC 2023:专业PDF编辑软件,引领高效办公新时代

Acrobat Pro DC 2023是一款专为Mac和Windows用户设计的专业PDF编辑软件&#xff0c;凭借其强大的功能和卓越的性能&#xff0c;成为现代职场人士不可或缺的得力助手。 这款软件拥有出色的PDF编辑能力。用户不仅可以轻松地对PDF文档中的文字、图片和布局进行编辑和调整&#xf…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷&#xff0c;可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中&#xff0c;需要在控制台执行以下指令&#xff1a; #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…

[实例] Unity Shader 利用顶点着色器模拟简单水波

我们都知道顶点着色器可以用来改变模型各个顶点的位置&#xff0c;那么本篇我们就利用顶点着色器来做一个模拟简单水波的应用。 1. 简谐运动 在进行模拟水波之前&#xff0c;我们需要了解简谐运动&#xff08;Simple Harmonic Motion&#xff09;公式&#xff1a; 其中&#…

【跟马少平老师学AI】-【神经网络是怎么实现的】(四)卷积神经网络

一句话归纳&#xff1a; 1&#xff09;用1个小粒度的模式&#xff0c;逐个与图像的局部区域进行运算&#xff0c;运算结果反映模式与区域的匹配程度。 2&#xff09;卷积神经网络与全连接神经网络的区别&#xff1a; 卷积神经网络的输出只与局部输入有连接。参数较少&#xff0…

使用jdbc方式操作ClickHouse

1、创建测试表&#xff0c;和插入测试数据 create table t_order01(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);insert into t_order01 values …

jupyter notebook切换conda虚拟环境

首先&#xff0c;切换到某个虚拟环境&#xff0c;本人切换到了d2l环境&#xff1a; (d2l) C:\Users\10129>pip install ipykernel然后&#xff0c;如代码所示安装ipykernel包 最后&#xff0c;按下述代码执行&#xff1a; (d2l) C:\Users\10129>python -m ipykernel i…

SQL 基础 | UNION 用法介绍

在SQL中&#xff0c;UNION操作符用于合并两个或多个SELECT语句的结果集&#xff0c;形成一个新的结果集。 使用UNION时&#xff0c;合并的结果集列数必须相同&#xff0c;并且列的数据类型也需要兼容。 默认情况下&#xff0c;UNION会去除重复的行&#xff0c;只保留唯一的行。…

Istio基础知识

一、什么是Istio Istio 提供⼀种简单的⽅式来为已部署的服务建⽴⽹络&#xff0c;该⽹络具有 负载均衡、服务间认证、监控等功能&#xff0c;只需要对服务的代码进⾏⼀点或不需要做任何改动。想要让服务⽀持 Istio&#xff0c;只需要在您的环境中部署⼀个特殊的 sidecar 代 理&…

Dashboard 安装部署

Dashboard 安装部署 Dashboard 安装部署 一&#xff1a;下载 二&#xff1a;部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败&#xff0c;可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…

vscode 插件 code settings sync(配置云端同步)

vscode 插件 code settings sync&#xff08;配置云端同步&#xff09; 电脑A和B&#xff0c;vscode配置都在A电脑上&#xff0c;此时你想要将A电脑的vscode配置同步到B电脑的vscode中 第一步&#xff1a;A电脑和B电脑都需要在VSCode中安装下图插件 code settings sync 第二步&…
最新文章