20 个版本
2.0.0-rc.0 | 2024 年 8 月 2 日 |
---|---|
2.0.0-beta.11 | 2024 年 7 月 31 日 |
2.0.0-beta.7 | 2024 年 6 月 17 日 |
2.0.0-beta.3 | 2024 年 3 月 21 日 |
2.0.0-alpha.0 | 2023 年 5 月 24 日 |
#121 in 数据库接口
1,408 每月下载量
61KB
632 行
通过 sqlx 接口 SQL 数据库。它支持 sqlite
,mysql
和 postgres
驱动程序,通过 Cargo 功能启用。
安装
此插件需要至少 1.75 版本的 Rust
我们推荐三种通用的安装方法。
- 使用 crates.io 和 npm(最简单,需要您信任我们的发布流程)
- 直接从 Github 使用 git 标签 / 修订哈希拉取源代码(最安全)
- 使用 Git 子模块在此 tauri 项目中安装此仓库,然后使用文件协议导入源代码(最安全,但使用不便)
通过在您的 Cargo.toml
文件中添加以下内容安装 Core 插件
src-tauri/Cargo.toml
[dependencies.tauri-plugin-sql]
features = ["sqlite"] # or "postgres", or "mysql"
version = "2.0.0-rc"
# alternatively with Git
git = "https://github.com/tauri-apps/plugins-workspace"
branch = "v2"
您可以使用您首选的 JavaScript 包管理器安装 JavaScript Guest 绑定
注意:由于大多数 JavaScript 包管理器无法从 git monorepos 安装包,我们为每个插件提供了只读镜像。这使得选项 2 更易于使用。
pnpm add @tauri-apps/plugin-sql
# or
npm add @tauri-apps/plugin-sql
# or
yarn add @tauri-apps/plugin-sql
# alternatively with Git:
pnpm add https://github.com/tauri-apps/tauri-plugin-sql#v2
# or
npm add https://github.com/tauri-apps/tauri-plugin-sql#v2
# or
yarn add https://github.com/tauri-apps/tauri-plugin-sql#v2
用法
首先,您需要将核心插件与 Tauri 注册
src-tauri/src/main.rs
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_sql::Builder::default().build())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
之后,所有插件 API 都可通过 JavaScript guest 绑定访问
import Database from "@tauri-apps/plugin-sql";
// sqlite. The path is relative to `tauri::api::path::BaseDirectory::AppConfig`.
const db = await Database.load("sqlite:test.db");
// mysql
const db = await Database.load("mysql://user:pass@host/database");
// postgres
const db = await Database.load("postgres://postgres:password@localhost/test");
await db.execute("INSERT INTO ...");
语法
我们使用 sqlx 作为底层库,采用他们的查询语法。
- sqlite 和 postgres 在替换查询数据时使用 "$#" 语法。
- mysql 使用 "?" 来替换查询数据。
// INSERT and UPDATE examples for sqlite and postgres
const result = await db.execute(
"INSERT into todos (id, title, status) VALUES ($1, $2, $3)",
[todos.id, todos.title, todos.status],
);
const result = await db.execute(
"UPDATE todos SET title = $1, status = $2 WHERE id = $3",
[todos.title, todos.status, todos.id],
);
// INSERT and UPDATE examples for mysql
const result = await db.execute(
"INSERT into todos (id, title, status) VALUES (?, ?, ?)",
[todos.id, todos.title, todos.status],
);
const result = await db.execute(
"UPDATE todos SET title = ?, status = ? WHERE id = ?",
[todos.title, todos.status, todos.id],
);
迁移
此插件支持数据库迁移,允许您管理数据库架构随时间的变化。
定义迁移
迁移使用 Rust 中的 Migration
结构定义。每个迁移应包含一个唯一的版本号、描述、要执行的 SQL 以及迁移类型(向上或向下)。
迁移示例
use tauri_plugin_sql::{Migration, MigrationKind};
let migration = Migration {
version: 1,
description: "create_initial_tables",
sql: "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);",
kind: MigrationKind::Up,
};
将迁移添加到插件构建器
迁移通过插件提供的 Builder
结构进行注册。使用 add_migrations
方法将您的迁移添加到特定数据库连接的插件中。
添加迁移的示例
use tauri_plugin_sql::{Builder, Migration, MigrationKind};
fn main() {
let migrations = vec![
// Define your migrations here
Migration {
version: 1,
description: "create_initial_tables",
sql: "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);",
kind: MigrationKind::Up,
}
];
tauri::Builder::default()
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations("sqlite:mydatabase.db", migrations)
.build(),
)
...
}
应用迁移
要在插件初始化时应用迁移,请将连接字符串添加到 tauri.conf.json
文件中
{
"plugins": {
"sql": {
"preload": ["sqlite:mydatabase.db"]
}
}
}
或者,客户端的 load()
也会为给定的连接字符串运行迁移
import Database from "@tauri-apps/plugin-sql";
const db = await Database.load("sqlite:mydatabase.db");
确保迁移已按正确顺序定义,并且可以安全地多次运行。
迁移管理
- 版本控制:每个迁移都必须有一个唯一的版本号。这对于确保迁移按正确顺序应用至关重要。
- 幂等性:编写迁移的方式应使其能够安全地重新运行,而不会导致错误或意外后果。
- 测试:彻底测试迁移以确保它们按预期工作,并且不会损害数据库的完整性。
贡献
接受 PR。请在提出拉取请求之前确保阅读贡献指南。
合作伙伴
要查看赞助商的完整列表,请访问我们的 网站 和 Open Collective。
许可
代码:(c) 2015 - 现在 - 常青树基金会内的 Tauri 项目。
适用于适用情况下的 MIT 或 MIT/Apache 2.0。
依赖项
~46–88MB
~1.5M SLoC