当前位置: 首页 > news >正文

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

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

  • Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库
    • 项目创建
    • 数据库准备
    • 连接请求
    • 功能实现

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

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

参考文档:https://blog.csdn.net/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(())
}

运行结果:

在这里插入图片描述

http://www.lryc.cn/news/586219.html

相关文章:

  • Spring 框架中的设计模式:从实现到思想的深度解析
  • 单链表的题目,咕咕咕
  • Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库
  • [Python] Flask 多线程绘图时报错“main thread is not in main loop”的解决方案
  • 【字符最长连续数量】2022-8-9
  • wedo稻草人-----第32节(免费分享图纸)
  • windows 改用 nvm
  • hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库
  • SpringAI实现聊天记录保存到MySQL
  • 浅谈 Python 中的 yield——yield的返回值与send()的关系
  • Golang 面向对象(封装、继承、多态)
  • 特辑:Ubuntu,前世今生
  • Go内存分配
  • python excel处理
  • 【世纪龙科技】新能源汽车结构原理体感教学软件-比亚迪E5
  • Windows 用户账户控制(UAC)绕过漏洞
  • 单细胞分析教程 | (二)标准化、特征选择、降为、聚类及可视化
  • 力扣-24.两两交换链表中的节点
  • 7. 负载均衡:流量调度引擎
  • STM32--USART串口通信的应用(第一节串口通信的概念)
  • stack和queue的使用和模拟实现以及了解deque
  • Kafka——聊聊Kafka的版本号
  • React 组件中怎么做事件代理?它的原理是什么?
  • 【6.1.0 漫画数据库技术选型】
  • LRU缓存机制完全实战:链表的工程落地与面试通关
  • 复现永恒之蓝
  • 网络配置综合实验全攻略(对之前学习的总结)
  • 脉冲神经网络膜电位泄漏系数学习:开启时空动态特征提取的新篇章
  • docker配置
  • 【android bluetooth 协议分析 07】【SDP详解 2】【SDP 初始化】