20 个版本

2.0.0-rc.02024 年 8 月 2 日
2.0.0-beta.112024 年 7 月 31 日
2.0.0-beta.72024 年 6 月 17 日
2.0.0-beta.32024 年 3 月 21 日
2.0.0-alpha.02023 年 5 月 24 日

#121 in 数据库接口

Download history 177/week @ 2024-04-27 89/week @ 2024-05-04 95/week @ 2024-05-11 83/week @ 2024-05-18 335/week @ 2024-05-25 108/week @ 2024-06-01 74/week @ 2024-06-08 222/week @ 2024-06-15 64/week @ 2024-06-22 246/week @ 2024-06-29 148/week @ 2024-07-06 156/week @ 2024-07-13 265/week @ 2024-07-20 568/week @ 2024-07-27 339/week @ 2024-08-03 226/week @ 2024-08-10

1,408 每月下载量

Apache-2.0 OR MIT

61KB
632

plugin-sql

通过 sqlx 接口 SQL 数据库。它支持 sqlitemysqlpostgres 驱动程序,通过 Cargo 功能启用。

安装

此插件需要至少 1.75 版本的 Rust

我们推荐三种通用的安装方法。

  1. 使用 crates.io 和 npm(最简单,需要您信任我们的发布流程)
  2. 直接从 Github 使用 git 标签 / 修订哈希拉取源代码(最安全)
  3. 使用 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。请在提出拉取请求之前确保阅读贡献指南。

合作伙伴

CrabNebula

要查看赞助商的完整列表,请访问我们的 网站Open Collective

许可

代码:(c) 2015 - 现在 - 常青树基金会内的 Tauri 项目。

适用于适用情况下的 MIT 或 MIT/Apache 2.0。

依赖项

~46–88MB
~1.5M SLoC