我真的不懂 一篇水篇 100 多 正常的 20多
是不是搞错了什麽
总之开始今天的内容吧
那麽今天介绍的是 Rust 的 SQLx 套件
注意这个跟 Diesel 不一样 不是 ORM
这个套件能够操作 SQL 的语言
那本篇将会以 SQLite 作为范例
并且使用最常见的几个操作
# Cargo.toml
[dependencies]
sqlx = { version = "0.5.7", features = [ "runtime-tokio-rustls", "sqlite" ] }
tokio = { version = "1.12.0", features = ["full"] }
anyhow = "1.0"
futures = "0.3"
以上是本次的 Cargo.toml
至於我自己弄的时候为了避免麻烦 tokio features 是直接设为 full
大可不必跟我一样这样做
那麽接下来是在 terminal 必须要输入的
Tips: 笔者的系统是 Garuda Linux (Arch 架构)
sudo pacman -S sqlite
cargo install sqlx-cli // 或者也可以 sudo pacman -S sqlx-cli
那上面基本上都是安装的部份
接下来就是创立资料库
export DATABASE_URL="sqlite:test.db"
sqlx migrate add <anyname>
按下 enter 後就会创立一个名为 migrations 的资料夹 里面有一个 sql 的档案
里面输入
CREATE TABLE account (
name TEXT PRIMARY KEY,
password TEXT NOT NULL
);
这边取决於个人想要写的东西 只要知道说 PRIMARY KEY 代表的是 找寻资料时的关键字
就像使用 map 资料结构时的 KEY
接下来
sqlx db create
上面的 test 可以自行更动 主要是建立环境变数
然後下面会创建出 名为 test 的 db 档
输入
sqlx migrate run
来将刚刚所写的设定套用
那这边可以看到 已经套用了刚刚所设定的东西在 test.db 上
(此软件为 SQLitebrowser)
好 OK 环境配置差不多这样就好了
这边我主要会讲 main function 新增 删除 改变 取值
那麽最重要的首先是 main function
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let pool = SqlitePool::connect(&env::var("DATABASE_URL")?).await?;
Ok(())
}
这边的话上面的 use 会是
use sqlx::sqlite::SqlitePool;
use std::env;
那 env::var 是拿来取得环境变数的 owob
然後 如果说 main function 下要使用 async 或是 await
必须要使用 tokio
其实还有另一个 只是我没用过
至於你会发现说 上面怎麽这麽多 ?
因为他们回传的都是 Result 所以需要用以前讲过的方式来处理
那今天会讲 新增的部份 其他的明天再说 休息w
async fn add_account(pool: &SqlitePool, name: String, password: String) -> anyhow::Result<()> {
let mut conn = pool.acquire().await?;
let add = sqlx::query!(
r#"INSERT INTO account (name, password) VALUES ($1, $2)"#, name, password,)
.execute(&mut conn).await?;
Ok(())
}
可以看到说这边他最後的回传值是 Ok(())
这个用法其实是对应上面所需要的 Result 因为这个函数可能会有 Err 产生
所以一定要回传 Result 至於为什麽要用 Anyhow 这个我可能要回去研究一下 @@
可以发现说 上面的 add 直接使用了 SQL 的语法
并且对应的值需要以
$num
来对应
上面写的 num 是指他的顺序
也就是他编排的顺序而且也不一定一定要是从 $1 开始 也可以 $2 $1 但是一定要是一个连续的数字不然会炸w
去连到我们的 pool 透过刚刚定义的 conn
那麽传入就
接下来 cargo run 跑起来会发现
已经成功新增
明天会将这个套件讲完
有点怕之後打疫苗会断更 QQ
行前作业 注册帐号 需要有自己的服务器或是相应的权限 开始後续作业 搜寻discord develo...
如果一个阵列中的任两个元素是有排序的,是不是代表整个阵列就是排序好的? 这就是泡沫排序的想法。 如果...
延伸昨天OpenVPN,介绍另一个VPN点对点的连接技术"WireGuard"。...
Virtual Judge ZeroJudge 题意 输入整数 I,输出二进位表示法与 parit...
身为管理者的您是否觉得已经建立详细作业程序,但产品品质却不符合预期? 工厂作业员每天一直在做动作重覆...