在rust中使用mysql可以使用mysql_async实现,mysql_async库是基于Tokio的异步MySql客户端库。
添加Tokio库
由于mysql_async是基于Tokio开发的,因此需要导入Tokio,同时也能更方便异步开发
在Cargo.toml中的[dependencies]下加入
1 | tokio = { version = "*", features = ["full"] } |
添加mysql_async库
在当前目录执行
1 | cargo add mysql_async |
即可导入最新版本的mysql_async库
在rust中引入mysql_async库
在顶端加入
1 | use mysql_async::prelude::*; |
初始化
初始化tokio
使用tokio宏在main函数中初始化tokio
1 |
|
创建mysql连接
1 | // mysql连接url |
由于get_conn是异步方法,所以需要使用await去推动执行
mysql查询
可以使用Trait mysql_async::prelude::Query和Trait mysql_async::prelude::Queryable进行sql查询
查询示例:
1 | // 创建表 |
上面示例中,使用Trait mysql_async::prelude::Query的ignore方法进行sql查询,Trait Query中有impl<Q: AsQuery> Query for Q,它为满足于AsQuery Trait约束的所有类型实现了Query Trait的方法(其中包括ignore)
而在Trait AsQuery中又有impl AsQuery for &str,故&str实现了AsQuery Trait,因此可以使用ignore方法
更多实现了AsQuery Trait的类型可以参考: AsQuery
安全的sql查询
使用params!宏可以安全的将rust变量替换到sql语句中
示例:
1 | let select_data: Option<Row> = r"SELECT name, score FROM registry WHERE id=:id" |
params!宏会替换:标记的文本,使用with方法去将params!应用的查询语句中,随后再调用查询方法即可
批量sql查询
示例:
1 | struct Data { |
with方法可以传入一个params!迭代器,随后调用batch方法即可批量替换sql语句进行查询
清理工作
1 | // 关闭mysql连接 |
完整示例代码
1 | use mysql_async::prelude::*; |
rust使用mysql_async库
https://blog.lingxh.com/post/rust-mysql-async/Author
lingxh
Published at
2024-04-25
License
CC BY-NC-SA 4.0