当前位置: 首页 > 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的,一般的机器上,不行的话,就的在优化大批量插入,引入多线程操作,分区同时并行插入

在这里插入图片描述

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

相关文章:

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

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…...

回退用 git revert 还是 git reset?

git revert 会生成一个新的 commit 来记录此次操作&#xff1b;git reset 是把 HEAD 指针向前挪动一次&#xff0c;会减少一个 commit。 回退用 git revert 回退还是用 git reset&#xff0c;核心就一点&#xff1a; 是否需要记录这次回退。 如果需要记录这次回退&#xff0c…...

【docker】多阶段构建与基础构建,及企业案例展示

基础构建与多阶段构建对比 基础构建&#xff08;单阶段构建&#xff09; 在基础构建中&#xff0c;所有构建过程和最终的应用程序都在同一个镜像中进行&#xff0c;构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖&#xff0c;因此最终镜…...

基于链表的基础笔试/面试题

1. 反转链表 问题描述&#xff1a;反转一个单向链表。 示例&#xff1a; 输入&#xff1a;1 → 2 → 3 → 4 → 5 输出&#xff1a;5 → 4 → 3 → 2 → 1 class ListNode {int val;ListNode next;ListNode(int x) {val x;} }public class LinkedList {public ListNode …...

SARIMA 模型Matlab代码

% 导入数据 data readtable(data.xlsx); % 假设数据在第一列 y data{:, 1}; % 获取第一列数据% 划分训练集和测试集&#xff0c;80% 训练&#xff0c;20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解

无论是CPU还是GPU&#xff0c;粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化&#xff0c;玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效&#xff08;Particle System&#xff09; 游戏效…...

Oracle对比表与表之间的结构

自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...

基于JSP+MySQL的网上招聘系统的设计与实现

摘要 在这样一个经济飞速发展的时代&#xff0c;人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说&#xff0c;他对就业市场和形势了解的不够详细&#xff0c;同时对自己的职业规划也很模糊&#xff0c;这就导致大量的 时间被花费在…...

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)

Linux 进程概念补充【Linux】 进程是什么&#xff08;不熟悉的兄弟可以看看&#xff09;。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生&#xff0c;实际上其描述的并不是正真的物理内存&#xff0c;而是虚拟内存&#xff0c;我们把它叫做进程地址空间 。 2…...

pytorch 融合 fuse 学习笔记

目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下&#xff08;与 LoRA 相关&#xff09; 参数融合功能 在使用 LoRA&#xff08;Low - Rank Adaptation&#xff09;对预训练模型进行微调后&#xff0c;fuse_lora函数的主要作…...

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…...

【eclipse】快捷键

【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键&#xff0c;它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率&#xff0c;尤其是在处理大型项目时…...

集成开发环境(IDE)的使用技巧插件配置

在开发过程中&#xff0c;集成开发环境&#xff08;IDE&#xff09;的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义&#xff08;Go to Definition&#xff09;&#xff1a;快速跳转到函数、类或变量的定义位…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说&#xff0c;都有committer机制&#xff0c;即代码写好之后会提交合并请求&#xff0c;待相关人员code review通过后再进行合入&#xff0c;所以code review就是代码合入代码仓库的最后一道关卡&#xff0c;对于代码质量的影响也是不容忽视…...

Qt 面试题学习13_2024-12-1

Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数&#xff0c;可以将QString转换为int、float、double等基本数据类型。 QStri…...

Hive 安装与架构详解

Hive 安装&#xff08;基于 Ubuntu 系统&#xff09; 为了学习 Hive 的相关操作&#xff0c;我们需要先安装 Hive&#xff0c;以下是基于 Ubuntu 系统安装 Hive 的步骤&#xff1a; 下载 Hive 我们将使用 hive-0.13.1-cdh5.3.2 版本&#xff0c;当然你可以根据需要下载最新的…...

前端入门指南:模块打包器是什么?模块打包器的工作原理与实践

前言 在前端开发的生态系统中&#xff0c;随着项目复杂度和规模的不断提升&#xff0c;代码管理和优化变得至关重要。模块化开发作为一种有效的代码组织方式&#xff0c;极大地提升了代码的可维护性和复用性。 然而&#xff0c;面对大量的模块和复杂的依赖关系&#xff0c;如…...

初识ProtoBuf以及环境搭建(Win和Ubuntu)

初始ProtoBuf 序列化和反序列化的概念 序列化&#xff1a;把对象转换为字节序列的过程 称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化&#xff1f; 存储数据&#xff1a;当你想把的内存中的对象状…...

springboot366高校物品捐赠管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…...

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉&#xff0c;出现新的请求结果&#xff0c;参数start更新&#xff0c;每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

RLHF vs RLVR:对齐学习中的两种强化方式详解

在语言模型对齐&#xff08;alignment&#xff09;中&#xff0c;强化学习&#xff08;RL&#xff09;是一种重要的策略。而其中两种典型形式——RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff09; 与 RLVR&#xff08;Reinforcement Learning with Ver…...