当前位置:网站首页>Rust Web(三)—— 通过sqlx连接数据库(MySQL)
Rust Web(三)—— 通过sqlx连接数据库(MySQL)
2022-08-03 01:40:00 【仕上がりへ】
在学习了前辈所演示的 PostgreSQL连接方式后所进行的尝试;
通过这次尝试也能够进一步学习连接MySQL的其中一种方式;
除本文所使用的
sqlx
连接方法外,还有其他的方式,诸如diesel
,以后有机会在进行实践;
目录
Rust Web(三)—— 通过sqlx连接数据库(MySQL)
Rust Web(三)—— 通过sqlx连接数据库(MySQL)
一、环境准备
项目创建
在自己选择的目录下,创建一个(子)项目,此处命名为
db
;在新建项目的
Cargo.toml
文件内,添加所需要的依赖,具体如下:
[package]
name = "db"
version = "0.1.0"
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
时,注意使用版本要相互兼容,否则会出现编译警告:
The following warnings were discovered during the build. These warnings are an indication that the packages contain code that will become an error in a future release of Rust. These warnings typically cover changes to close soundness problems, unintended or undocumented behavior, or critical problems that cannot be fixed in a backwards-compatible fashion, and are not expected to be in wide use.
Each warning should contain a link for more information on what the warning means and how to resolve it.
To solve this problem, you can try the following approaches:
Some affected dependencies have newer versions available. You may want to consider updating them to a newer version to see if the issue has been fixed.
winapi v0.2.8 has the following newer versions available: 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.3.8, 0.3.9
If the issue is not solved by updating the dependencies, a fix has to be implemented by those dependencies. You can help with that by notifying the maintainers of this problem (e.g. by creating a bug report) or by proposing a fix to the maintainers (e.g. by creating a pull request):
Repository: GitHub - retep998/winapi-rs: Rust bindings to Windows API
Detailed warning command:
cargo report future-incompatibilities --id 1 --package [email protected]
If waiting for an upstream fix is not an option, you can use the
[patch]
section inCargo.toml
to use your own version of the dependency. For more information, see: Overriding Dependencies - The Cargo Book
具体需要访问
crates.io
来查看合适的版本;而在版本兼容的的情况下,呈现的是以下结果:
连接请求
在根项目的目录下,新建名为
.env
的文件,在文件内写入请求 URL;由于笔者所创建的项目是一个子项目,因此其位置位于所在根项目的目录之下;
DATABASE_URL=mysql://{user}:{password}@{IP}:{port}/{database name}
二、数据库准备
笔者在此处选择的是过去在名为
test
的数据库中的tt1
表;内容如下:
三、功能实现
说明
首先简要说明一下本文所涉及 MySQL连接调用的 API
MySqlPoolOptions
new()
参考文档
sqlx::mysql - RustMySQL database driver.https://docs.rs/sqlx/0.6.0/sqlx/mysql/index.html
代码实现
// extern crate chrono;
extern crate dotenv;
extern crate sqlx;
// use chrono::NaiveDateTime;
use dotenv::dotenv;
use sqlx::mysql::MySqlPoolOptions;
use std::env;
use std::io;
#[derive(Debug)]
pub struct Info {
pub ind: i32, // 数据库中将此字段设置为了主键
pub email: Option<String>, // 使用Option来处理潜在的空值情况
pub uid: Option<i32>,
pub reg_time: Option<i32>,
}
#[actix_rt::main]
async fn main() -> io::Result<()> {
dotenv().ok(); // 检测并读取.env文件中的内容,若不存在也会跳过异常
let database_url = env::var("DATABASE_URL")
.expect("Not configured in .env");
let db_pool = MySqlPoolOptions::new()
.connect(&database_url)
.await
.unwrap();
let tt1_rows = sqlx::query!(
r#"select ind,email,uid,regtime from tt1 where ind = ?"#,
6
)
.fetch_all(&db_pool)
.await
.unwrap();
let mut tt1_list = vec![];
for row in tt1_rows {
tt1_list.push(Info {
ind: row.ind.unwrap(),
email: row.email,
uid: row.uid,
reg_time: row.regtime,
})
}
println!("Info = {:?}", tt1_list);
Ok(())
}
运行效果
每一个不曾起舞的日子,都是对生命的辜负。
边栏推荐
猜你喜欢
随机推荐
SAP ABAP OData 服务如何支持修改(Update)操作试读版
全栈---Proxy
Wireshark data capture and analysis of the transport layer protocol (TCP protocol)
阿南的对话
[QNX Hypervisor 2.2用户手册]10 虚拟设备参考
公司代码学习笔记
买了一瓶饮料
扩展卡尔曼滤波【转】
数据中台建设(八):数据服务体系建设
win下使用vscode+wsl2
一个接口并发问题的模拟与复现
能添加任意贴图超级复布局的初级智能文本提示器
Violence recursion to dynamic programming 08 (pony go chess)
VS2010 组件列表与对应名称
Brute force recursion to dynamic programming 07 (516. Longest palindrome subsequence)
【Flink】如何生成 Flink 作业的交互式火焰图?
怎么做postgrsql主备?
Greenplum数据库故障分析——can not listen port
45部署LVS-DR群集
236. The binary tree in recent common ancestor