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

网站培训网站建设怎么选择扬中网站建设

网站培训网站建设,怎么选择扬中网站建设,杭州竞彩网站开发,网站 内容查询 本部分是对 「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.dnsts.com.cn/news/67799.html

相关文章:

  • WordPress插件做成主题代码网站制作和优化
  • 浏览wap网站网站开发服务器数据库
  • 免费网站商城建设深圳龙华房价2022最新房价
  • 最简单的做网站的软件江苏建设工程信息网官网
  • 网站可信认证必须做吗wordpress产品筛选
  • 用asp做旅游网站邀请函制作软件app
  • 没网站怎么做淘宝客可信网站认证有用吗
  • 北京建设投标网站查网站权重
  • 水果网站建设案例wordpress主页显示分类
  • 更新网站 seo顺德 网站开发 招聘
  • 山东企业建站软件做网站公司选择哪家好
  • 校园二手网站的建设方案应用开发用什么软件
  • 帝国cms仿站工具网络棋牌推广平台有哪些
  • 网站底部工信部链接怎么做企业网站推广方案范文
  • php网站开发linux只做app不做网站可以吗
  • 网站英文地图怎么做动漫制作专业就业形势
  • 做网站维护有前途吗情人节网站怎么做
  • 免费网站建设优化如何做网站的信息分类
  • 安徽网新科技怎么建设网站百度搜索风云榜小说总榜
  • 欧美网站特点房产资讯什么网站做的好
  • 孝感网站开发公司中国建设银行官网个人网上银行登录
  • 当地建设厅网站网站被惩罚之后怎么做
  • 中旅远洋商务网站建设策划书百度经验官网首页
  • 公司做网站的费用如何记账大连企业招聘网站
  • 网站建设公司的服务公司重庆十大装饰公司
  • 网站建设项目签约仪式举行营销推广信息
  • 群晖nas 做网站免费发布推广信息的网站
  • 常州做的网站的公司网站商城网站程序
  • 缙云建设局网上协同办公oa网站设计方案构思和设计过程
  • 网上书城网站开发的目的与意怎么申请网址怎么用