Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库

Rust 与 Mysql 交互篇之 Sqlx 数据库在编程中是一个很重要的环节,主要体现在数据的存储上,方方面面都会用到,重要性不言而喻。本教程以`sqlx`及`diesel`两个crate做为基础的教程,介绍其基本用法 阅读详情

Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库

本文是一个单独的小项目。

参考文档:https://blog.youkuaiyun.com/weixin_45987327/article/details/126117286

项目创建

新建一个 Rust 项目,打开 Cargo.toml,把 edition 改成 “2021”。

在 [dependencies] 部分添加:

actix-rt="2.7.0"
actix-web="4.1.0"
dotenv = "0.15.0"
chrono = {version = "0.4.19", features = ["serde"]}
serde = {version = "1.0.140", features = ["derive"]}
sqlx = {version = "0.6.0", default_features = false, features = [
    "mysql",
    "runtime-tokio-rustls",
    "macros",
    "chrono",
]}

注意:在添加 crate 时,注意使用版本要相互兼容,否则会出现编译警告。具体需要访问 crates.io 来查看合适的版本。

在终端执行命令 cargo build,构建成功:

在这里插入图片描述

数据库准备

在这里插入图片描述

新建一个名为 course 的 MySQL 数据库,再新建一个名为 course 的表:

在这里插入图片描述

time 如果用 timestamp 类型的话,会报错:error[E0277]: the trait bound `NaiveDate: From<DateTime>` is not satisfied,原因是:the trait `From<DateTime>` is not implemented for `NaiveDate`。

内容如下:

在这里插入图片描述

连接请求

在根项目的目录下,新建名为 .env 的文件,在文件内写入请求 URL,形如:

DATABASE_URL=mysql://{user}:{password}@{IP}:{port}/{database name}

这里,我的请求 URL 是:

DATABASE_URL=mysql://root:12138@127.0.0.1:3306/course

功能实现

参考文档:https://docs.rs/sqlx/0.6.0/sqlx/mysql/index.html

use chrono::NaiveDateTime;
use dotenv::dotenv;
use sqlx::mysql::MySqlPoolOptions;
use std::env;
use std::io;

#[derive(Debug)]
pub struct Course {
    pub id: i32,
    pub teacher_id: i32,
    pub name: String,
    pub time: Option<NaiveDateTime>,
}

#[actix_rt::main]
async fn main() -> io::Result<()> {
    // 检测并读取 .env 文件中的内容,若不存在也会跳过异常
    dotenv().ok();

    let database_url = env::var("DATABASE_URL")
        .expect("DATABASE_URL 没有在 .env 文件里设置");

    let db_pool = MySqlPoolOptions::new()
        .connect(&database_url)
        .await
        .unwrap();

    let course_rows = sqlx::query!(
        r#"SELECT id, teacher_id, name, time FROM course"#
    )
        .fetch_all(&db_pool)
        .await
        .unwrap();

    let mut courses_list = vec![];
    for row in course_rows {
        courses_list.push(Course {
            id: row.id,
            teacher_id: row.teacher_id,
            name: row.name,
            time: Some(chrono::NaiveDateTime::from(row.time.unwrap())),
        })
    }
    println!("Courses = {:?}", courses_list);

    Ok(())
}

运行结果:

在这里插入图片描述

Rust 中使用原生 SQL 与 SQLx 当谈到使用 SQL 时,Rust 生态系统让我们有太多的选择。SQLx 是一个纯粹的异步、与运行时无关的 Rust SQL 包,它允许您在没有 DSL 的情况下使用编译时类型检查的查询。让我们看看 SQLx 的实际应用! 阅读详情

相关推荐

㈠. Rust语言 web框架actix-web和sqlx的踩坑日记 + 搭环境

学了好几个月的Rust, 终于上手写一个web项目, 处处是坑, 某些地方卡住了我一周多时间, 分享几个坑, 给后来的小伙伴 本人电脑环境 我尽可能少依赖第三方库, 做一个干净, 比较少的代码让大家看懂, 给大家提供一个模板 第一个坑 今天, 也就是2021年6月30日, 目前的actix-web的最新版本是3.3.2, 同时actix-web的异步运行时是基于tokio 0.1x系列构建的 与此同时, sqlx的最新版本是0.5.5, 这个第三方库运行时是基于tokio1.x系列的 也就是说,

孔祥旭的博客 2721

Rust + Axum + MySQL + SQLx

微信 code2session 在 user_service.rs 中用 reqwest 调用 https://api.weixin.qq.com/sns/jscode2session,换取真实 openid。// TODO: 调用微信接口 https://api.weixin.qq.com/sns/jscode2session。/// 微信小程序登录:code → openid → 生成/查询用户 → 返回 JWT。("服务启动在 http://{}", addr);// 新用户,插入记录。

小道士写程序 246

使用 Actix-Web、SQLx 和 Redis 构建高性能 Rust Web 服务

Actix-Web是一个用于构建 Web 应用程序的高性能、异步框架,基于 Rust 语言。异步:使用tokio和async-std等异步运行时,提供高性能和高并发处理能力。中间件:支持中间件机制,可以方便地扩展功能。路由:灵活的路由机制,支持路径参数、查询参数等多种路由方式。类型安全:利用 Rust 的类型系统,确保代码的类型安全性和健壮性。社区支持:拥有活跃的开发者社区和丰富的文档资源。

大白菜代码的博客 2166

Rust-Sqlx极简教程

简介 sqlx 是 rust 中的一个数据库访问工具。具有以下特点: 异步:原生就支持异步,在并发性高的场合能够得到更好的支持 编译时检查查询:sqlx可以在 cargo build 的时候检查执行sql和响应值 多数据库支持:PostgresSQL,MySql,SqlLite,MSSql,MariaDB 多运行时支持:支持主流 rust 运行时。async-std,tokio,actix,native-tls,rustls 内置连接池,支持查询缓存 不足 sqlx 不是 orm 框架 实践 本例将

Naylor的博客 6553

使用 Actix-Web、SQLx 和 Redis 构建高性能 Rust Web 服务:模块化结构

Actix-Web是一个用于构建 Web 应用程序的高性能、异步框架,基于 Rust 语言。异步:使用tokio和async-std等异步运行时,提供高性能和高并发处理能力。中间件:支持中间件机制,可以方便地扩展功能。路由:灵活的路由机制,支持路径参数、查询参数等多种路由方式。类型安全:利用 Rust 的类型系统,确保代码的类型安全性和健壮性。社区支持:拥有活跃的开发者社区和丰富的文档资源。

大白菜代码的博客 1540

使用Rust实现简单的CURD 通过Actix-web & Sqlx 现实

使用Rust实现简单的CURD Actix-web & Sqlx

qq_45653382的博客 1470

Rust Web(三)—— 通过sqlx连接数据库(MySQL)

在学习了前辈所演示的PostgreSQL连接方式后所进行的尝试;通过这次尝试也能够进一步学习连接MySQL的其中一种方式;除本文所使用的sqlx连接方法外,还有其他的方式,诸如diesel,以后有机会在进行实践;...

AlanKSorata的博客 4315

Rust Axum前后端分离项目-使用sqlx连接数据库

【代码】Rust Axum前后端分离项目-使用sqlx连接数据库。

weixin_39141295的博客 1117

推荐项目:构建未来web的基石——RealWorld Rust Axum SQLx

推荐项目:构建未来web的基石——RealWorld Rust Axum SQLx 在浩瀚的开源海洋中,有一颗璀璨的技术之星,它集现代编程语言的智慧与效率之大成,为我们展现了一个全面而强大的全栈应用实现框架——RealWorld Rust Axum SQLx。这不仅是对Rust编程语言的一次深度探索,也是将Axum、SQLx与Yew这些明星库结合,创造高效、可靠的Web服务和前端体验的典范。 项...

gitblog_00692的博客 872

8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发

深入探讨 Rust+Axum 数据库集成,包括 ORM 选型及实践,助力用户管理系统开发。id: i32,通过本文的介绍,我们了解了 Rust+Axum 中数据库集成的相关知识,包括 ORM 选型、异步连接池配置、事务管理与连接生命周期,以及用户管理系统的 CRUD 开发实践。合理选择 ORM 工具并正确配置数据库连接池,能为开发高性能、稳定的 Web 应用奠定坚实基础。在实际项目中,开发者可以根据项目需求和自身技术栈来选择合适的方案。

muyouking 1398

【Rust操作MySql】Actix Web 框架结合 MySQL 数据库进行交互

在 Rust 中,使用 Actix Web 框架结合 MySQL 数据库进行交互,通常可以通过 sqlx、diesel、mysql_async 等库实现。 本文就使用 Actix Web + sqlx + MySQL 的最常见组合示例,包括设置、连接池、路由处理和查询执行等进行详细阐述。

景天科技苑 3万+

如何在Axum和Actix-web中集成SQLx:完整Rust Web开发教程

SQLx是一个强大的异步Rust SQL工具包,提供编译时检查的查询功能,无需使用DSL。本文将详细介绍如何在流行的Rust Web框架Axum和Actix-web中集成SQLx,构建高性能的数据库驱动应用。🎯 ## SQLx与Web框架集成概述 SQLx支持PostgreSQL、MySQL、SQLite和MSSQL数据库,与Axum和Actix-web框架完美兼容。通过这种集成,开发者可以

gitblog_00318的博客 1071

Rust中的SQLx数据库交互及实践

本章深入探讨了如何在Rust项目中集成SQLx库,以实现与数据库的高效交互。首先介绍了SQLx作为Rust异步数据库访问工具的优势,例如它支持多种数据库引擎和运行时,并且在社区中广泛使用。然而,它也有缺点,如缺乏内置的SQL抽象验证。接着,本章详细描述了如何在项目中添加SQLx依赖,包括设置Cargo.toml文件,并手动创建必要的数据库表。此外,本章还探讨了如何将数据库连接集成到项目中,提出了几种不同的架构选择,并讨论了如何在大型代码库中抽象化数据库访问,以适应复杂和不断增长的应用需求。

weixin_35811662的博客 906

Rust 的 SQLx 库: 安全 & 性能

SQLx 凭借“编译时 SQL 验证”和“原生异步支持”,在 Rust 数据库开发中构建了安全与性能的双重优势。

码刀攻城 1534

sqlx:Rust Rust SQL工具包。 一个异步的纯Rust SQL板条箱,具有无需DSL即可进行编译时检查的查询。 支持PostgreSQL,MySQL,SQLite和MSSQL

SQLx :toolbox: Rust SQL工具包 | | 内置 :red_heart_selector: 由 SQLx是一个异步的纯Rust † SQL条板箱,具有无需DSL即可进行编译时检查的查询。 真正的异步。 使用async / await从头开始构建,以实现最大的并发性。 没有DSL的类型安全SQL (如果需要)。 使用query!()宏在编译时检查SQL并绑定参数。 (如果愿意,您仍然可以使用动态SQL查询。) 数据库不可知论。 支持 , , 和 。 纯Rust。 Postgres和MySQL / MariaDB驱动程序是使用零不安全††代码以纯Rust编写的。 运行时不可知。 适用于不同的运行时( / / )和TLS后端( , )。 †由于SQLite是嵌入式数据库,因此SQLite驱动程序使用libsqlite3 C库(对于SQLite来说,纯Rust的唯一方法是将所有SQLite移植到Rust)。 ††SQLx使用#![forbid(unsafe_code)]除非启用了sqlite功能。 当SQLite驱动程序与C交互时,这些交互是uns

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4728

Rust 中与数据库连接池的集成

在 Rust 中集成数据库连接池,能够有效提升 Web 应用的并发性能和数据库操作的效率。通过使用和bb8等库,我们可以在异步 Web 服务中高效地管理数据库连接池,从而避免频繁建立和销毁连接的开销。此外,合理配置连接池的大小、优化数据库查询和事务管理是保证系统性能的关键。在实际开发中,结合具体的业务场景,对连接池进行调优与优化,将使得应用更加高效、稳定。

2501_94029480的博客 1713

gcc/g++ 链接库的编译与链接

gcc/g++ 链接库的编译与链接 surgewong@gmail.com http://blog.youkuaiyun.com/surgewong       程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中,有些公共代码需要反复使用,就把这些代码编译成为“库”文件。在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态(链接)库,其特点是可

Surge 4万+

Rust 全栈开发:从零到一,你该学哪些核心技术?

Rust 全栈不是未来,而是正在发生的现实。后端服务;前端 Web;桌面与 WASM;甚至命令行与云原生工具——你就拥有了完整的开发控制力。如果你想成为新一代的“全栈开发者”,Rust 是最值得你深入学习的语言之一。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 997

AT89C52单片机+LCD屏:手把手教你做一个能算小数和负数的计算器(附完整代码)

本文详细介绍了如何使用AT89C52单片机和LCD1602显示屏构建一个支持小数和负数运算的高精度计算器。从硬件选型、系统架构设计到核心算法实现,提供了完整的代码示例和优化技巧,特别适合51单片机初学者和课程设计参考。

weixin_30374009的博客 368

〖Python接口自动化测试实战篇④〗- 接口自动化测试详解

[接口测试] 是相对来说和我们的功能测试 [最为接近的一种自动化测试手段] ,所以我们首先来学习接口测试的内容。 实现接口的开发与接口的测试,在我们的思维上、想法上、面向的态度上都是不一样的。所以大家要有一个思维上的转换,要认识了解一下 接口测试到底是做什么的、它的功能、意义在哪里。...

易编橙 · 终身成长社群,相遇已是上上签! 5万+

【rust】8、连接数据库:sqlx

sqlx 是 rust 的数据库访问工具, 本身并不是 orm,但常见的 orm 都是基于它实现的。其有如下特点:

呆呆的猫的博客 2144

STM32入门教程:无人机控制

我们将会一步一步引导您完成无人机的控制代码,包括无人机的姿态控制、飞行控制和通信控制等。第三步:配置无人机姿态控制 无人机的姿态控制是指控制无人机在空中的倾斜和转向。为了实现姿态控制,我们需要使用加速度计和陀螺仪传感器来获取无人机的姿态信息,并使用PID控制算法来控制无人机的姿态。在这一步骤中,您需要根据您使用的具体传感器和控制算法的要求进行更详细的配置和编码。在通信控制中,您需要考虑到通信的稳定性和可靠性。第五步:通信控制 无人机的通信控制是指与地面站或其他设备进行通信,传输飞行数据和接收飞行指令。

m0_75244442的博客 747
上一篇: Rust Web 全栈开发(四):构建 REST API
下一篇: Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值