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

开发一套ERP 第八弹 RUst 插入数据

在这里插入图片描述

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能

还是得看下原文档怎么操作的

src 目录为crate 的根目录

想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用

原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出现冲突,在tauri2.0 的crate 中可以进行调用和使用

use super::data;
use data::mysql::MysqlPoolConnect;
use data::base::ListData;
use mysql::params;
use mysql::prelude::Queryable;pub fn test_mysql(){match MysqlPoolConnect(3, 1) {Ok(mut pool)=>{let rows = vec![ListData { id:12,name:Some("hello world".into()),color:Some("测试颜色".into()),name_and_color:Some("white".into()),avatar:Some("/etc/pictures".into()),zh_size:Some("34-43".into()),u_size:Some("53-78".into()),diff:100,factory_name:Some("baidu".into()),output:64,input:89,threshold:100,input_date:Some("2024-11-29".into()),output_date:Some("2024-11-29".into())},];println!("connect mysql service okay !!!");println!("test struct ListData is okay?");for it in rows.iter() { println!("{:?}",it);}let result = pool.exec_batch(r"INSERT INTO INBOUND(id,name,color,name_and_color,avatar,zh_size,u_size,factory_name,input,input_date)VALUES (:id,:name,:color,:name_and_color,:avatar,:zh_size,:u_size,:factory_name,:input,:input_date)",rows.iter().map(|p| params! {"id" => p.id,"name" => &p.name,"color" => &p.color,"name_and_color" => &p.name_and_color,"avatar" => &p.avatar,"zh_size" => &p.zh_size,"u_size" => &p.u_size,"factory_name" => &p.factory_name,"input" => p.input,"input_date" => &p.input_date}));match result {Ok(_) => println!("Insert Into database Okay ... ..."),Err(e) => println!("Insert Into database error {}",e)}},Err(e) => {eprintln!("Error:{}",e);},}
}

插入的数据字段最好用蛇形命名,要不容易出现,插入出错,

数据中包含: input, inputDate ,改成蛇形命名后,可以正常插入,仅限于Rust mysql crate 的使用

mysql 对 日期的范围筛选很友好

#[allow(dead_code)]
pub fn inbound_row_insert(rows:Vec<ListData>) -> Result<(),Error> {let res;match MysqlPoolConnect(3, 1){Ok(mut pool) => {
let result = pool.exec_batch(r"INSERT INTO INBOUND(id,name,color,name_and_color,avatar,zh_size,u_size,factory_name,input,input_date)
VALUES (:id,:name,:color,:name_and_color,:avatar,:zh_size,:u_size,:factory_name,:input,:input_date)",rows.iter().map(|p| params! {"id" => p.id,"name" => &p.name,"color" => &p.color,"name_and_color" => &p.name_and_color,"avatar" => &p.avatar,"zh_size" => &p.zh_size,"u_size" => &p.u_size,"factory_name" => &p.factory_name,"input" => p.input,"input_date" => &p.input_date
}));
res = result;},
Err(e) => {res = Err(e);}};res
}

在封装一层函数

rUST 的宏定义还是很有意思的

#[macro_export]
macro_rules! params {() => {};(@to_pair $map:expr, $name:expr => $value:expr) => (let entry = $map.entry(std::vec::Vec::<u8>::from($name));if let std::collections::hash_map::Entry::Occupied(_) = entry {panic!("Redefinition of named parameter `{}'", std::string::String::from_utf8_lossy(entry.key()));} else {entry.or_insert($crate::value::Value::from($value));});(@to_pair $map:expr, $name:ident) => (let entry = $map.entry(stringify!($name).as_bytes().to_vec());if let std::collections::hash_map::Entry::Occupied(_) = entry {panic!("Redefinition of named parameter `{}'", std::string::String::from_utf8_lossy(entry.key()));} else {entry.or_insert($crate::value::Value::from($name));});(@expand $map:expr;) => {};(@expand $map:expr; $name:expr => $value:expr, $($tail:tt)*) => {params!(@to_pair $map, $name => $value);params!(@expand $map; $($tail)*);};(@expand $map:expr; $name:expr => $value:expr $(, $tail:tt)*) => {params!(@to_pair $map, $name => $value);params!(@expand $map; $($tail)*);};(@expand $map:expr; $name:ident, $($tail:tt)*) => {params!(@to_pair $map, $name);params!(@expand $map; $($tail)*);};(@expand $map:expr; $name:ident $(, $tail:tt)*) => {params!(@to_pair $map, $name);params!(@expand $map; $($tail)*);};($i:ident, $($tail:tt)*) => {{let mut map: std::collections::HashMap<std::vec::Vec<u8>, $crate::value::Value, _> = std::default::Default::default();params!(@expand (&mut map); $i, $($tail)*);$crate::params::Params::Named(map)}};($i:expr => $($tail:tt)*) => {{let mut map: std::collections::HashMap<std::vec::Vec<u8>, $crate::value::Value, _> = std::default::Default::default();params!(@expand (&mut map); $i => $($tail)*);$crate::params::Params::Named(map)}};($i:ident) => {{let mut map: std::collections::HashMap<std::vec::Vec<u8>, $crate::value::Value, _> = std::default::Default::default();params!(@expand (&mut map); $i);$crate::params::Params::Named(map)}}
}

很多的匹配原则

在这里插入图片描述在这里插入图片描述

方便的测试方法

在这里插入图片描述

加一些测试接口,会很方便的测试接口的是否可用

单个接口还可以看到出错的原因

在这里插入图片描述

方遍定位错误的原因

在这里插入图片描述
在这里插入图片描述

简易的查询插入接口

Rust 的原设计不建议 函数重载
元编程使用 宏定义实现

删除只需要根据ID 删除就行

数据更新也是根据ID更新

筛选查询就用点烦了,每个节点都是一个and 条件 筛选

Rust 也支持excel 数据导出,就是格式化为 csv 最容易

目前只需要数据交互为网络交互,其他都是本地代码,数据可以方便更换和上传

mysql/rust/vue/docker = 可高度自定义的ERP,每个人都可以自己写,数据还安全,都是本地的,如果大点就去云上拉,浏览器不太安全的

tauri2.0 编完才5MB 这啥概念,运存还小

在这里插入图片描述

堪比python的易用程度

在这里插入图片描述

比first 和 second 少打好多子,虽然都是补全

and 一起 就可以联在一起查表了

关键不collect 直接在map组合
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相当方便

在这里插入图片描述

直接分库分表, 有些汇总展现表缓存一个map;设置上限 4G,其他的分库分表查询,更划算;stream 处理起来 就和 往那些排序的算法上套了

有一个blog 上说 rust 的 map 安全型号,性能不加,C++ 的 map 有时候 insert 直接 segmentfault 都不知道咋回事儿但是rust吧,处理不好直接退出程序

在这里插入图片描述> 查询用了30ms 这不太能忍受,产生10w 条数据测试下… …

在这里插入图片描述

400ms 还okay的;目前的需求满足

在这里插入图片描述

数据插入很慢 156s
在这里插入图片描述

禁用自动提交

在这里插入图片描述

先这样用 … …

电脑的主频和多人还okay的,一般的机器上,不行的话,就的在优化大批量插入,引入多线程操作,分区同时并行插入

在这里插入图片描述

普通笔记本就可以存好多
在这里插入图片描述


http://www.mrgr.cn/news/78579.html

相关文章:

  • 阅读《基于蒙特卡洛法的破片打击无人机易损性分析》_笔记
  • 40分钟学 Go 语言高并发:Go程序性能优化方法论
  • 2008年IMO几何预选题第3题
  • 【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置
  • ubuntu安装chrome无法打开问题
  • List集合的进一步学习:性能优化
  • 《datawhale2411组队学习 模型压缩技术7:NNI剪枝》
  • 【Canvas与雷达】简约绿色扫描雷达图标
  • 【数据集划分】训练集train/验证集val/测试集test是如何划分的?
  • HarmonyOS NEXT应用开发,关于useNormalizedOHMUrl选项的坑
  • 51c自动驾驶~合集38
  • 随机变量的线性最小均方估计(LMMSE)——多个观测变量
  • 使用C#开发VTK笔记(一)-VTK开发环境搭建
  • 【数据库系统概论】第6章 (一)函数依赖和码
  • 3.26线性回归对率回归
  • 大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集
  • 2008年IMO几何预选题第3题
  • Gazebo插件相机传感器(可订阅/camera/image_raw话题)
  • 力扣刷题TOP101:6.BM7 链表中环的入口结点
  • 输出1~n中能被3整除,且至少有一位数字是5的所有整数.:JAVA
  • 3.22决策树,离散值
  • 【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践
  • 《Django 5 By Example》阅读笔记:p388-p454
  • 使用C#开发VTK笔记(一)-开发环境搭建
  • 开发指南080-邮箱录入控件
  • 单细胞细胞通讯全流程分析教程,代做分析和辅导