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

洛阳市网站建设_网站建设公司_VS Code_seo优化

中文域名网站建设,网站建设外贸广州,企业制作网站哪家好,乐天seo培训中心查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库#xff1a; chrono 流式查询使用#xff1a; query_iter 输出到Vec使用#xff1a; query 映射到结构体使用#xff1a; query_map 获取单条数据使用#xff1a; query_first 命名… 查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库 chrono 流式查询使用 query_iter 输出到Vec使用 query 映射到结构体使用 query_map 获取单条数据使用 query_first 命名参数查询使用 exec_first CREATE TABLE student (  id int(11) NOT NULL AUTO_INCREMENT,  name varchar(128) NOT NULL,  age int(11) NOT NULL,  id_card varchar(128) NOT NULL,  last_update date NOT NULL,  PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 插入测试数据insert into student (name, age, id_card, last_update) values (张三, 23, 123456789X, CURRENT_DATE());insert into student (name, age, id_card, last_update) values (李四, 24, 8382353902, CURRENT_DATE()) 注意mysql[2]这个crate新版本demo有问题文档的更新速度跟不上代码的修改脚步.. 需要指定版本 [dependencies] mysql 20.0.0 #通配符*表示可以使用任何版本通常会拉取最新版本此处需要指定不使用最新版本流式查询 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    conn.query_iter(select * from student)        .unwrap()        .for_each(|row| {            let r: (i32, String, i32, String, NaiveDate)  from_row(row.unwrap());            println!({}, {},{},{}, {:?}, r.0, r.1, r.2, r.3, r.4);        });} row的类型是mysql_common::row::Row其把数据以字节的形式存储。 所以需将低级的字节转换成想要的类型 如i32,String这里使用了from_row。注意转换后的数据以元组的形式返回其中每一项和选择列的顺序相同。 输出 1, 张三,23,123456789X, 2022-04-262, 李四,24,8382353902, 2022-04-26 流式查询 其实还可以将查询结果收集到Vec中。 Vec中的每个元素都是一个元组。 query函数已经将字节转换为选择的数据类型因此不需要再转换了。 需要注意的是这里必须明确元组的数据类型(如此处是 Vec(i32, String, i32, String, NaiveDate))。 否则编译器没办法做转换。 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接// 输出到Vec    let res: Vec(i32, String, i32, String, NaiveDate)         conn.query(select * from student).unwrap();    for r in res {        println!({}, {},{},{}, {:?}, r.0, r.1, r.2, r.3, r.4);    }} 映射结果到结构体 如果表的列数很多使用元组容易混淆更普遍的做法是定义一个结构体。 如下定义一个Student结构体, 然后可以用query_map将查询结果映射到Student中。 不需要指定数据类型编译器会根据Student类型自动推导 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    // 将结果映射到提前定义好的结构体    struct Student {        id: u64,        name: String,        age: u16,        id_card: String,        last_changed_on: NaiveDate,    }    let res  conn.query_map(        select * from student,        |(id, name, age, id_card, update)| Student {            id: id,            name: name,            age: age,            id_card: id_card,            last_changed_on: update,        },    ).expect(Query failed.);    for i in res {        println!(            {}, {},{},{}, {:?},            i.id, i.name, i.age, i.id_card, i.last_changed_on        )    }} 单条数据查询 查询特定数据行可能会出现下面几种情况: 找到返回实际数据 没有找到行 发生错误 所以使用query_first函数返回的是Option的结果。 需要将其解包两次才可以获取实际的行数据: use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    struct Student {        id: u64,        name: String,        age: u16,        id_card: String,        last_changed_on: NaiveDate,    }    // 条件查询查询单个数据    let res  conn.query_first(select * from student where name  张三)        .map(            // Unpack Result            |row| {                row.map(|(id, name, age, id_card, update)| Student {                    id: id,                    name: name,                    age: age,                    id_card: id_card,                    last_changed_on: update,                })            },        );    match res.unwrap() {        Some(student)  println!(            {}, {},{},{}, {:?},            student.id, student.name, student.age, student.id_card, student.last_changed_on        ),        None  println!(Sorry no student found.),    }} 命名参数的使用 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    struct Student {        id: u64,        name: String,        age: u16,        id_card: String,        last_changed_on: NaiveDate,    }    let res  conn        .exec_first(            select * from student where name  :name,            params! {                name  李四            },        )        .map(            // Unpack Result            |row| {                row.map(|(id, name, age, id_card, update)| Student {                    id: id,                    name: name,                    age: age,                    id_card: id_card,                    last_changed_on: update,                })            },        );    match res.unwrap() {        Some(student)  println!(            {}, {},{},{}, {:?},            student.id, student.name, student.age, student.id_card, student.last_changed_on        ),        None  println!(Sorry no student found.),    }} 写操作 本部分是对 Rust使用MySQL数据库02[3]的学习与记录 插入数据使用 conn.exec_drop() 使用预编译语句插入大量数据 conn.prep() 使用 conn.last_insert_id()可以获取主键 更新和删除也使用 conn.prep和 conn.exec_drop 插入新数据 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    conn.exec_drop(        INSERT INTO student (name, age, id_card, last_update) VALUES (:name, :age, :id_card, :last_update),        params! {        name  王五,        age  28,        id_card  66666688,        last_update  today(),}).unwrap();}fn today() - NaiveDate {    let l  Local::today();    NaiveDate::from_ymd(l.year(), l.month(), l.day())} 和上面一节一样命名参数在这里使用了params宏的语法 exec_drop方法中的drop表示没有返回结果 用于执行插入/更新/删除的sql 使用预编译语句 使用conn.prep将sql编译成预编译语句。 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    let stmt  conn.prep(INSERT INTO student (name, age, id_card, last_update) VALUES (:name, :age, :id_card, :last_update))        .unwrap();    for i in 1..10 {        conn.exec_drop(stmt, params! {         name  dashen,         age  18  i,         id_card  1234565X,         last_update  NaiveDate::from_ymd(2017, 05, 04),     }).unwrap()    }} 获取生成的主键id 可以通过conn.last_insert_id()方法获取到新记录的主键id该方法将返回的一个类型为u64 的值 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    conn.exec_drop(INSERT INTO student (name, age, id_card, last_update) VALUES (:name, :age, :id_card, :last_update), params! {    name  fliter,    age  29,    id_card  88888888,    last_update  NaiveDate::from_ymd(2022, 05, 04),}).unwrap();    println!(新插入的记录的主键为: {}, conn.last_insert_id())} 新插入的记录的主键为: 13 更新和删除 类似于插入操作 use chrono::prelude::*;// 用来处理日期use mysql::*;use mysql::prelude::*;fn main() {    let url  mysql://root:12345678localhost:3306/shuang;    let pool  Pool::new(url).unwrap(); // 获取连接池    let mut conn  pool.get_conn().unwrap();// 获取链接    let stmt  conn.prep(update student set name:name, last_update:last_update where id:id)        .unwrap();    conn.exec_drop(stmt, params! {     name  新名字,     last_update  NaiveDate::from_ymd(2038, 12, 31),     id  10,}).unwrap();    let stmt  conn.prep(delete from student where id:id).unwrap();    conn.exec_drop(stmt, params! {    id  12,}).unwrap();} 参考资料 [1] 「Rust入门系列」Rust 中使用 MySQL: https://rustmagazine.github.io/rust_magazine_2021/chapter_3/rust-mysql.html [2] mysql: https://crates.io/crates/mysql [3] Rust使用MySQL数据库02: https://www.modb.pro/db/179746 本文由 mdnice 多平台发布
http://www.lebaoying.cn/news/2563.html

相关文章:

  • 网站设计公司北京域名解析管理网站
  • 自己的电脑怎么做网站信息类网站 wordpress
  • 渭南做网站电话网站推广策略的主要方式
  • 空间坐标系做图网站免费网页模板之家
  • 商城网站制作明细网站域名绑定破解
  • 高端手机网站定制学网络运营在哪里学比较好
  • 北京品牌网站建设公司哪家好注册城乡规划师有什么用
  • 武进网站建设哪家好重庆市建设岗位培训中心
  • 网站制作系统哪个好网络推广公司推荐
  • 福州网站seo优化公司python做电商网站
  • 网站是先解析还是先备案上海大型外贸公司
  • 做公司网站需要几天做网站需要网络服务器
  • 网站你应该明白什么意思吗百度视频推广
  • 六盘水网站开发长沙关键词优化平台
  • html网站制作答辩ppt山西省煤炭厅基本建设局网站
  • 做网站编辑怎么样服务器建站
  • 宜宾网站建设价格网页qq注册新账号免费
  • 手机建站平台网站免费的不用下载
  • 房产网站的全景图怎么做关键词检测工具
  • 做网站phpwordpress 按钮样式
  • 深圳优化网站方法网站页面设计需求
  • 建设第三方公众号平台网站教程广州网站制作托管
  • 网站建设 58同城网站建设得步骤
  • 百度的网站收录怎么做如何管理wordpress
  • p2p视频网站开发简易app开发软件
  • 哈尔滨网站优化对策导购类网站如何做会员互动
  • 深圳涂料网站建设哈尔滨百度网络推广
  • 门户网站建设的好处广州网站建设优化方案
  • 怎么设置网站名称玉名是什么意思
  • 百度网站优化推广青岛网站建设好不好