【Rust光年纪】Rust 中常用的数据库客户端库:核心功能与使用场景
探秘 Rust 语言下的多种数据库客户端库:从安装到实际应用
前言
在现代的软件开发中,数据库是不可或缺的一部分。为了与数据库进行交互,开发人员需要使用各种数据库客户端来执行操作、构建查询等。本文将介绍一些用于 Rust 语言的常见数据库客户端库,帮助读者了解它们的核心功能、安装配置以及 API 概览,从而选择适合其项目需求的库进行开发。
欢迎订阅专栏:Rust光年纪
文章目录
- 探秘 Rust 语言下的多种数据库客户端库:从安装到实际应用
- 前言
- 1. diesel:一个用于Rust语言的ORM和查询构建器
- 1.1 核心功能
- 1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 ORM操作
- 1.3.2 查询构建
- 2. sqlx:一个用于Rust语言的异步数据库驱动程序和查询构建器
- 2.1 简介
- 2.1.1 核心功能
- 2.1.2 使用场景
- 2.2 安装与配置
- 2.2.1 安装指南
- 2.2.2 基本配置
- 2.3 API 概览
- 2.3.1 异步数据库操作
- 2.3.2 查询构建
- 3. Redis-rs:一个用于Rust语言的Redis客户端
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指南
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 连接管理
- 3.3.2 数据操作
- 4. postgres:一个用于Rust语言的PostgreSQL客户端
- 4.1 简介
- 4.1.1 核心功能
- 4.1.2 使用场景
- 4.2 安装与配置
- 4.2.1 安装指南
- 4.2.2 基本配置
- 4.3 API 概览
- 4.3.1 连接管理
- 4.3.2 数据操作
- 5. rusqlite:一个用于Rust语言的SQLite客户端
- 5.1 简介
- 5.1.1 核心功能
- 5.1.2 使用场景
- 5.2 安装与配置
- 5.2.1 安装指南
- 5.2.2 基本配置
- 5.3 API 概览
- 5.3.1 连接管理
- 5.3.2 数据操作
- 6. Clickhouse-rs:一个用于Rust语言的ClickHouse客户端
- 6.1 简介
- 6.1.1 核心功能
- 6.1.2 使用场景
- 6.2 安装与配置
- 6.2.1 安装指南
- 6.2.2 基本配置
- 6.3 API 概览
- 6.3.1 连接管理
- 6.3.2 数据操作
- 总结
1. diesel:一个用于Rust语言的ORM和查询构建器
Diesel是一个用于Rust语言的ORM(对象关系映射)和查询构建器。它旨在提供类型安全、可组合和易于使用的数据库操作工具,使得在Rust中进行数据库操作更加简单和高效。
1.1 核心功能
Diesel的核心功能包括:
- 数据库模式和结构体之间的自动生成映射
- 类型安全的查询构建
- 支持多种常见数据库后端(如PostgreSQL、MySQL、SQLite等)
- 提供ORM功能,通过Rust代码操作数据库,避免手写SQL语句
1.2 使用场景
Diesel适用于那些希望在Rust项目中进行数据库交互的开发者。无论是小型应用程序还是大型系统,使用Diesel都能够提供稳健的数据库操作支持。
1.2 安装与配置
1.2.1 安装指南
首先,需要在Cargo.toml文件中添加Diesel的依赖:
[dependencies]
diesel = { version = "1", features = ["<backend>"] }
其中<backend>是指你想要使用的数据库后端,比如PostgreSQL、MySQL或SQLite。
然后,在项目根目录下执行以下命令安装Diesel CLI工具:
$ cargo install diesel_cli --no-default-features --features "<backend>"
1.2.2 基本配置
在开始使用Diesel之前,需要配置连接信息,比如数据库URL等。可以通过Diesel CLI的命令行工具来生成初始配置:
$ diesel setup
这将会在项目中生成一个.env文件,里面包含了数据库连接信息。
1.3 API 概览
1.3.1 ORM操作
使用Diesel进行ORM操作非常简单。以下是一个示例,假设有一个名为users的表:
#[macro_use]
extern crate diesel;
use diesel::prelude::*;table! {users {id -> Integer,name -> Text,}
}#[derive(Queryable)]
struct User {id: i32,name: String,
}fn find_user_by_id(user_id: i32, connection: &PgConnection) -> QueryResult<User> {use self::users::dsl::*;users.filter(id.eq(user_id)).first(connection)
}
以上代码定义了一个名为User的结构体,并且实现了一个函数用于根据ID从数据库中获取用户信息。
1.3.2 查询构建
Diesel提供了类型安全的查询构建功能,使用起来非常直观。以下是一个简单的示例,用于在users表中查询所有用户的名字:
let all_users = users::table.load::<User>(&connection);
以上代码使用了load函数来执行查询并返回结果集。
Diesel官网:Diesel
2. sqlx:一个用于Rust语言的异步数据库驱动程序和查询构建器
2.1 简介
sqlx 是一个用于 Rust 语言的异步数据库驱动程序和查询构建器,它能够提供高效的数据库操作和灵活的查询构建功能。
2.1.1 核心功能
- 异步数据库操作
- 查询构建
- 数据库连接池管理
2.1.2 使用场景
sqlx 适用于需要与数据库进行交互的 Rust 项目,尤其是那些需要进行异步操作或者有复杂查询需求的项目。它支持多种常见数据库,如 PostgreSQL、MySQL、SQLite 等。
2.2 安装与配置
2.2.1 安装指南
你可以在 Cargo.toml 文件中添加 sqlx 的依赖:
[dependencies]
sqlx = "0.5"
然后在代码中引入 sqlx:
use sqlx;
更多安装和更新信息请参考 sqlx 官方文档
2.2.2 基本配置
对于不同类型的数据库,你需要进行相应的连接配置,比如:
use sqlx::postgres::PgPoolOptions;#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let pool = PgPoolOptions::new().max_connections(5).connect("postgresql://username:password@localhost/database").await?;// ...Ok(())
}
更多配置选项和使用方法,请参考 sqlx 官方文档
2.3 API 概览
2.3.1 异步数据库操作
sqlx 提供了丰富的异步数据库操作方法,比如执行 SQL 查询、事务处理等。下面是一个简单的示例:
use sqlx::query;#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let result = query!("SELECT id, name FROM users").fetch_all(&pool).await?;for row in result {println!("id: {}, name: {}", row.id, row.name);}Ok(())
}
更多异步数据库操作方法请参考 sqlx 官方文档
2.3.2 查询构建
sqlx 提供了灵活的查询构建方法,让你可以轻松地构造复杂的 SQL 查询。例如:
let username = "Alice";
let user = sqlx::query_as!(User,"SELECT * FROM users WHERE username = $1",username
)
.fetch_one(&pool)
.await?;
更多查询构建方法请参考 sqlx 官方文档
以上是 sqlx 的基本介绍和使用方法,希望对你有所帮助。更多详细内容请查阅 sqlx 官方文档。
3. Redis-rs:一个用于Rust语言的Redis客户端
3.1 简介
Redis-rs是一个用于Rust语言的Redis客户端,它提供了连接到Redis服务器并与之交互的功能。通过Redis-rs,开发者可以在Rust项目中方便地使用Redis数据库。
3.1.1 核心功能
Redis-rs的核心功能包括:
- 连接到Redis服务器
- 执行各种Redis命令
- 处理Redis响应
- 支持异步操作
3.1.2 使用场景
Redis-rs适用于需要在Rust项目中与Redis进行交互的场景,例如缓存管理、会话存储、消息队列等。
3.2 安装与配置
3.2.1 安装指南
要在Rust项目中使用Redis-rs,需要在项目的Cargo.toml文件中添加对Redis-rs的依赖声明,并在代码中引入相应的模块。
[dependencies]
redis = "0.22.0"
官方文档链接:Redis-rs安装指南
3.2.2 基本配置
基本配置包括设置Redis服务器的连接地址、认证信息等。
3.3 API 概览
3.3.1 连接管理
Redis-rs提供了连接到Redis服务器的功能,开发者可以通过Connection类型来管理与Redis服务器的连接。
以下是一个简单的示例代码:
use redis::Client;fn main() {let client = Client::open("redis://127.0.0.1/").unwrap();let mut con = client.get_connection().unwrap();// 执行Redis命令
}
官方文档链接:连接管理API
3.3.2 数据操作
Redis-rs支持各种数据操作,包括字符串、哈希表、列表、集合等操作。
以下是一个简单的字符串操作示例代码:
use redis::Commands;fn main() {let client = redis::Client::open("redis://127.0.0.1/").unwrap();let mut con = client.get_connection().unwrap();let _: () = con.set("my_key", 42).unwrap();let result: isize = con.get("my_key").unwrap();println!("my_key: {}", result);
}
官方文档链接:数据操作API
4. postgres:一个用于Rust语言的PostgreSQL客户端
4.1 简介
postgres 是一个用于 Rust 语言的 PostgreSQL 客户端库,它提供了连接数据库、执行查询和处理结果等功能。
4.1.1 核心功能
- 连接数据库
- 执行 SQL 查询
- 处理查询结果
4.1.2 使用场景
postgres 可以用于 Rust 语言开发的项目中,用来连接和操作 PostgreSQL 数据库。
4.2 安装与配置
4.2.1 安装指南
要在你的 Rust 项目中使用 postgres 库,首先需要在 Cargo.toml 文件中添加以下依赖:
[dependencies]
postgres = "0.17"
然后通过 Cargo 来构建项目来安装该库:
$ cargo build
4.2.2 基本配置
在代码中引入 postgres 库:
extern crate postgres;
4.3 API 概览
4.3.1 连接管理
使用 postgres 连接到数据库的示例代码如下:
use postgres::{Client, Error};fn connect() -> Result<Client, Error> {let client = Client::connect("host=localhost user=postgres", postgres::NoTls)?;Ok(client)
}
官网链接:https://docs.rs/postgres
4.3.2 数据操作
执行 SQL 查询并处理结果的示例代码如下:
use postgres::{Client, NoTls};fn main() {let mut client = Client::connect("host=localhost user=postgres", NoTls).unwrap();for row in client.query("SELECT id, name FROM users", &[]).unwrap() {let id: i32 = row.get(0);let name: &str = row.get(1);println!("id: {}, name: {}", id, name);}
}
官网链接:https://docs.rs/postgres
5. rusqlite:一个用于Rust语言的SQLite客户端
5.1 简介
rusqlite 是一个用于 Rust 语言的 SQLite 客户端。它提供了操作 SQLite 数据库的功能,可以方便地进行数据库连接、数据查询和操作。
5.1.1 核心功能
- 支持 SQLite 数据库的连接与断开
- 提供了执行 SQL 语句并获取结果的功能
- 允许通过参数化的 SQL 语句执行来防止 SQL 注入攻击
5.1.2 使用场景
rusqlite 可用于 Rust 项目中需要使用 SQLite 进行数据存储和管理的场景,比如轻量级的应用程序、嵌入式设备等。
5.2 安装与配置
5.2.1 安装指南
要在 Rust 项目中使用 rusqlite,首先需要在 Cargo.toml 文件中添加对应的依赖:
[dependencies]
rusqlite = "0.25.0"
然后运行 cargo build 来安装该依赖。
更多安装信息可参考 rusqlite crate。
5.2.2 基本配置
在 Rust 项目中使用 rusqlite 时,需要在代码中引入相应的模块:
extern crate rusqlite;use rusqlite::Connection;
5.3 API 概览
5.3.1 连接管理
使用 rusqlite 连接 SQLite 数据库,并创建表:
use rusqlite::NO_PARAMS;fn main() -> Result<(), Box<dyn std::error::Error>> {let conn = Connection::open("mydb.db")?;conn.execute("CREATE TABLE IF NOT EXISTS person (id INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER NOT NULL,data BLOB)",NO_PARAMS,)?;Ok(())
}
参考:rusqlite Connection
5.3.2 数据操作
向表中插入数据并查询:
use rusqlite::{Result, NO_PARAMS};fn main() -> Result<(), Box<dyn std::error::Error>> {let conn = Connection::open("mydb.db")?;conn.execute("INSERT INTO person (name, age) VALUES (?1, ?2)",&[&"Alice", &30],)?;let mut stmt = conn.prepare("SELECT id, name, age FROM person")?;let person_iter = stmt.query_map(NO_PARAMS, |row| {Ok(Person {id: row.get(0)?,name: row.get(1)?,age: row.get(2)?,})})?;for person in person_iter {println!("Found person {:?}", person);}Ok(())
}#[derive(Debug)]
struct Person {id: i32,name: String,age: i32,
}
参考:rusqlite Statement
以上是对 rusqlite 的简要介绍以及在 Rust 项目中的安装、配置和基本使用示例。希望能够帮助你快速上手使用 rusqlite 进行 SQLite 数据库操作。
6. Clickhouse-rs:一个用于Rust语言的ClickHouse客户端
6.1 简介
Clickhouse-rs 是一个专为 Rust 语言设计的 ClickHouse 客户端,提供了连接管理、数据操作等功能,使得 Rust 开发者可以方便地与 ClickHouse 数据库进行交互。
6.1.1 核心功能
- 支持连接到 ClickHouse 数据库
- 执行 SQL 查询和命令
- 支持数据插入、更新、删除等操作
6.1.2 使用场景
Clickhouse-rs 可以被广泛应用于需要在 Rust 项目中访问 ClickHouse 数据库的场景,例如数据分析、报表生成、实时数据处理等领域。
6.2 安装与配置
6.2.1 安装指南
你可以通过 Cargo,在项目的 Cargo.toml 文件中添加以下依赖来安装 clickhouse-rs:
[dependencies]
clickhouse = "0.1.2"
更多安装方式及详细信息,请参考 clickhouse-rs GitHub 页面。
6.2.2 基本配置
使用 clickhouse-rs 需要在项目中引入 clickhouse crate,并根据ClickHouse服务器的实际情况配置连接参数。以下是一个基本的 ClickHouse 连接配置示例:
use clickhouse::types::Block;
use clickhouse::Client;fn main() {let db_url = "clickhouse://username:password@localhost:9000/default";let client = Client::default().with_url(db_url);
}
6.3 API 概览
6.3.1 连接管理
clickhouse-rs 提供了 connect 方法来连接到 ClickHouse 数据库。以下是一个简单的连接示例:
use clickhouse::Client;
use clickhouse::errors::Result;fn main() -> Result<()> {let db_url = "clickhouse://username:password@localhost:9000/default";let client = Client::default().with_url(db_url);// 测试连接是否成功client.ping()?;Ok(())
}
6.3.2 数据操作
clickhouse-rs 提供了丰富的方法来执行数据操作,包括 SQL 查询、数据插入、更新和删除等。以下是一个简单的数据插入示例:
use clickhouse::types::Block;
use clickhouse::Client;
use clickhouse::insert::Insert;fn main() {let db_url = "clickhouse://username:password@localhost:9000/default";let client = Client::default().with_url(db_url);// 创建插入器let insert = Insert::table("test_table").columns(&["id", "name", "age"]).values(vec![Block::new().push(1).push("Alice").push(25),Block::new().push(2).push("Bob").push(30),]);// 执行插入操作client.insert(insert).expect("Failed to insert data");
}
以上是 clickhouse-rs 的一些基本功能和用法介绍,更多详细信息可以查阅 clickhouse-rs GitHub 页面。
总结
通过本文的介绍,读者可以对用于 Rust 语言的各种数据库客户端有一个清晰的认识。无论是针对关系型数据库还是 NoSQL 数据库,针对异步操作还是同步操作,都有相应的库可以满足需求。在选择数据库客户端时,开发人员需要考虑到项目的实际需求和特点,权衡各个库的优劣,从而做出明智的决策。
相关文章:
【Rust光年纪】Rust 中常用的数据库客户端库:核心功能与使用场景
探秘 Rust 语言下的多种数据库客户端库:从安装到实际应用 前言 在现代的软件开发中,数据库是不可或缺的一部分。为了与数据库进行交互,开发人员需要使用各种数据库客户端来执行操作、构建查询等。本文将介绍一些用于 Rust 语言的常见数据库…...
网络安全防御【防火墙双机热备带宽管理综合实验】
目录 一、实验拓扑图 二、实验要求 三、实验思路: 四、实验步骤: 1、FW3的网络相关配置: 2、FW1的新增配置: 3、交换机LSW6(总公司)的新增配置: 4、双机热备技术配置(双机热…...
19.x86游戏实战-创建MFC动态链接库
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...
图论建模技巧搜集
一些经典题目 找可达路径 UVa - 11604 General Sultan 平面图最小割对偶图最短路 UVa - 1376 Animal Run 最小割建模 UVa - 1515 Pool construction 费用流建模 洛谷P3159 [CQOI2012] 交换棋子 一些可以转化为二分图最大权匹配的建模题 UVa1006/LA2238 Fixed Partition Me…...
pytorch学习(九)激活函数
1.pytorch常用激活函数如下: #ReLU激活函数 #Leaky ReLU激活函数 #Sigmoid激活函数 #Tanh激活函数 #Softmax激活函数 #Softplus2.代码 import torch.nn as nn import torch import numpy from torch.utils.tensorboard import SummaryWriterwriter SummaryWriter…...
conda 环境打包与使用
conda 环境导出 使用 Conda 打包环境,可以创建一个可重复使用的环境文件,便于在不同的机器上重新创建相同的环境。以下是具体的步骤: 1. 创建 Conda 环境 如果你还没有创建一个 Conda 环境,可以使用以下命令创建一个新环境&…...
jenkins 插件版本冲突
一、Jenkins安装git parameter 插件重启后报错与临时解决方案 cd /root/.jenkins cp config.xml config.xml.bak vim config.xml <authorizationStrategy class"hudson.security.FullControlOnceLoggedInAuthorizationStrategy"><denyAnonymousReadAcces…...
Python print() 格式化输出
Python print{} 格式化输出 1. print()2. 浮点数 (float)References 1. print() 传递给函数的值称为参数。 引号没有打印在屏幕上,它们只是表示字符串的起止,不是字符串的一部分。可以用这个函数在屏幕上打印出空行,只要调用 print() 就可以…...
【Qt+opencv】计时函数与图像变换
文章目录 前言计算时间函数图像变换旋转镜像缩放 总结 前言 在图像处理和计算机视觉的应用中,我们经常需要对图像进行各种变换,如旋转、缩放、剪切等。同时,为了评估算法的性能,我们也需要对代码的执行时间进行精确的测量。OpenC…...
nodejs下载+react安装
一、nodejs安装 1、nodejs下载 具体安装可参考连接:2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了_nodejs安装及环境配置-CSDN博客 下载地址:Node.js — 下载 Node.js 测…...
linux service小例
linux service 测试 1.创建一个app // myapp.c // 间隔10s写入时间到文件 #include <stdio.h> #include <time.h> #include <unistd.h> // 引入unix标准函数定义,如sleep()int main() {FILE *fp;time_t now;char buffer[80];// 打开文件以追加模…...
iOS 开发包管理之 Swift Package Manager
这是由官方推出,用于管理分发 swift 代码的工具。这个在 Xcode 是天然的存在,就是说我们不用安装就能够直接使用。 File > Add Package Dependencies… 在弹出来窗口选择一些库来导入 又或者点左下角的“” > Add Package Collection… 添加完成…...
【C语言初阶】C语言数组基础:从定义到遍历的全面指南
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言函数 🌹🌹期待您的关注 🌹🌹 ❀数组 📒1. 什么是数组…...
AI开源战争的真相
引言 在AI技术迅猛发展的今天,开源与闭源之争成为了AI圈内最热的话题之一。大模型免费开放的背后到底隐藏着什么样的真相?这是一个令人困惑的问题。本文将深入探讨开源与闭源之争的历史背景、技术演进以及商业利益的博弈。 开源概念的起源 开源软件的…...
使用Java填充Word模板的技术详解
目录 概述常见的Java Word处理库 Apache POIAspose.Words for JavaDocx4j 使用Apache POI填充Word模板 创建和读取Word文档填充文本填充表格 使用Aspose.Words for Java填充Word模板 创建和读取Word文档填充文本填充表格 使用Docx4j填充Word模板 创建和读取Word文档填充文本填…...
vmware配置centos+配置静态ip联网+更换镜像
centos7配置参考【实战】VMware17虚拟机以及Centos7详细安装教程-CSDN博客 ip配置步骤: 先更改编辑虚拟网络编辑器中的内容 就按照还原默认设置来,设定后就是以上内容,然后一定要记住子网ip和子网掩码 接下来就是NAT设置: 网关…...
广州数据中心服务器搬迁方案
设备搬迁的准备工作涵盖资料准备、环境准备、计划细化等工作。资料准备主要是对旧机房的整理工作,对所搬运的设备进行资料整理,首先对每台设备建立基本情况、位置说明、系统关联性、搬迁批次及工作步骤等的设备档案,然后在档案资料收集完的基…...
uniapp开发钉钉小程序流程
下载开发工具 1、小程序开发工具 登录钉钉开发平台,根据自己的需求下载合适的版本,我这里下载的是Windows (64位)版本 小程序开发工具 - 钉钉开放平台 2、HBuilder X HBuilderX-高效极客技巧 新建项目及相关配置 新建项目 …...
河南萌新联赛2024第(一)场:河南农业大学 A D F G H I K
A 造数 题目描述: 给定一个整数 𝑛 ,你可以进行以下三种操作 操作1: 1 操作2; 2 操作3: 2 问最少需要多少次操作可以将 0 转为为 𝑛 。 解题思路 操作1,2,3。操作 3 …...
通信协议_C#实现CAN通信
CAN协议 CAN(Controller Area Network)即控制器局域网络。特点: 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。双绞线:使用双绞线作为通信介质,支持较远的通信距离。…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
